25 messaggi dal 30 ottobre 2011
Non so se si puo' fare questa cosa, non so nemmeno in che modo cercare informazioni e informarmi.
(ambiente ASP.NET + MySQL)
Vorrei poter creare dinamicamente un url per esempio:
dominio piatti di un ristorante quindi ho tutto il menu che ha la sottocategoria antipasti - primi - secondi - ecc... che a loro volta hanno i titoli dei piatti e le relative ricette.
Visualizzo tutti i piatti con una Datalist in cui mostro solo alcuni dati del piatto, cliccando su ogni singolo piatto visualizzo un form con tutti i dettagli del piatto cliccato. Mi potrebbe bastare questo ma vorrei che ogni piatto avesse un suo url e quindi un link condivisibile.

è possibile visualizzare questi dati in una nuova pagina con un URL creato dinamicamente che identifichi quel determinato piatto univocamente e in qualunque momento?

grazie in anticipo
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
il routing di Asp.Net può fare al caso tuo.
Guarda per esempio l'URL di questa pagina di aspitalia, è qualcosa di simile a quello che devi realizzare tu. L'url è:
/forum/post/384899/URL-Creato-Dinamicamente.aspx

mentre tu dovrai produrre un link tipo:
/piatti/primi/1234/Spaghetti-alla-carbonara.aspx


Il routing di Asp.Net ti permette di "disegnare" un url inserendo in esso delle variabili e poi di associare quella definizione ad singola pagina aspx, in modo che possa rispondere a vari url, sia che si tratti di primi o di secondi, di spaghetti o di tofu.

La pagina, grazie alla collezione RouteData.Values, potrà sapere quale categoria e sottocategoria è stata richiesta, e soprattutto l'ID di quale piatto si deve andare a mostrare. L'ultimo frammento "Spaghetti-alla-carbonara.aspx" è quasi unicamente ad uso e consumo dei motori di ricerca. Tu estrarrai i dati dal DB in base al valore dell'ID.

Leggi qui, c'è un ottimo articolo di Marco De Sanctis che spiega come mettere in pratica tutto questo.
http://www.aspitalia.com/script/1041/Utilizzare-URL-Routing-Web-Forms-ASP.NET-4.0.aspx

ciao,

Enjoy learning and just keep making
25 messaggi dal 30 ottobre 2011
Perfetto! Grazie è dir poco! ;)
25 messaggi dal 30 ottobre 2011
rieccomi :(
sono giorni che provo a risolvere questo problema seguendo l'articolo che mi hai indicato, ma niente.

ASP.NET 4.0 VB è il mio ambiente.

nel file global.asax ho inserito la seguente porzione di codice

    
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        configureRoutes(RouteTable.Routes)
    End Sub

    Private Sub configureRoutes(routes As RouteCollection)
        routes.MapPageRoute("piatti", "-", "~/TuttiPiatti.aspx")
        routes.MapPageRoute("piatti-id", "{idp}", "~/PiattiDettagli.aspx")

End Sub


nella pagina TuttiPiatti.aspx ho una datalist con il seguente linkbutton con il quale devo accedere alla pagina PiattiDettagli.aspx generando un url dinamicamente.
<asp:LinkButton ID="LinkButton1" Runat="server" text='<%# Eval("titolo") %>' CommandName="Select" Font-Bold="True" Font-Size="Large" />


nel codice della TuttiPiatti.aspx.vb ho quanto segue
Public Shared idp As String
Protected Sub DataList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataList1.SelectedIndexChanged

  'Dim idriga As ImageButton = e.CommandSource
  idp = DataList1.SelectedValue 'prendo l'id selezionato dalla lista
  Response.RedirectToRoute("piatti-id", idp)  'eseguo la generazione dell'url


Nella pagina PiattiDettagli.aspx

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        Dim piattoId = Me.RouteData.Values("idp")
End Sub


Credo di aver seguito alla lettera l'articolo ma ho il seguente errore
Impossibile trovare una route corrispondente per RedirectToRoute.
riferito al
Response.RedirectToRoute("piatti-id", idp)

Se invece lo sostituisco con il
Dim piattiUrl As String = Page.GetRouteUrl("piatti-id", idp)
ho solo un ricaricamento della pagina TuttiPiatti.aspx

se invece utilizzo l'istruzione
Response.RedirectToRoute("piatti-id", idp)
vengo indirizzato alla pagina TuttiPiatti.aspx ma con il seguente URL (da notare il - prima del ? inserito nel global.asax)

http://localhost:2614/ilricettario/-?Length=2

che cosa significa questo? come posso controllare meglio il funzionamento a parte i breakpoint?

Vi ringrazio in anticipo!!!
Modificato da FRAx85 il 24 novembre 2011 23.39 -
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao, prova a modificare le routes così:
routes.MapPageRoute("piatti", "piatti/", "~/TuttiPiatti.aspx")
routes.MapPageRoute("piatti-id", "piatti/{idp}", "~/PiattiDettagli.aspx")

Il secondo parametro identifica l'url richiesto.
Se si visita www.dominio.it/piatti/, il motore di routing capirà che è stata richiesta la route chiamata "piatti", e quindi manderà in esecuzione la pagina "TuttiPiatti.aspx" che è associata ad essa.

Se invece si richiede www.dominio.it/piatti/1234, data la presenza di un ulteriore frammento dopo "piatti/", allora verrà scelta la route denominata "piatti-id", e l'esecuzione passerà a PiattiDettagli.aspx.

Bisogna che le route abbiano un qualcosa di unico che le contraddistingua, altrimenti si genera confusione.

FRAx85 ha scritto:

Se invece lo sostituisco con il
Dim piattiUrl As String = Page.GetRouteUrl("piatti-id", idp)
ho solo un ricaricamento della pagina TuttiPiatti.aspx


Metti un breakpoint dopo quella linea. Cosa vale piattiUrl? Il parametro idp dovrebbe essere passato all'interno di un tipo anonimo, quindi così:
Dim piattiUrl As String = Page.GetRouteUrl("piatti-id", New With {.idp = idp})
Questo consente alla funzione GetRouteUrl non solo di conoscere il valore di idp, ma anche di sapere che quello è proprio il valore da usare per il frammento {idp} indicato nella route.

ciao,

Enjoy learning and just keep making
25 messaggi dal 30 ottobre 2011
non so come ringraziarti! Davvero molto gentile!!
Grazie ai tuoi suggerimenti ho fatto un passo avanti finalmente con
Dim piattiUrl As String = Page.GetRouteUrl("piatti-id", New With {.idp = idp})


assegno un valore a piattiUrl un valore "più vicino ad un url" infatti durante l'esecuzione il suo valore è "/miosito/piatti/51" con idp=51.

Però (c'è sempre un però) non vengo indirizzato nella pagina dettagli ma solo un reload della pagina con la lista con lo stesso identico url, nel global.asax non sempre funzionano i breakpoint. come mai?

Scusami le domande che possono sembrare banali, ma non ho moltissima esperienza.

Alla fine ho risolto utilizzando il
Response.RedirectToRoute("segnalazioni-id", New With {.ids = ids})


non so com'è in questo modo riesco ad ottenere il risultato! credo che sia quello che conta, no? comunque se sai spiegarti il motivo per cui un metodo funziona e l'altro no, sarei felice di conoscerlo e capirlo anch'io.

Ti ringrazio infinitamente.
Modificato da FRAx85 il 25 novembre 2011 00.58 -
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao, entrambi i metodi sono corretti infatti "dietro le quinte" lavorano allo stesso modo. Se il primo non funziona è perché, probabilmente, devi aggiungere tu un redirect.

Dim piattiUrl As String = Page.GetRouteUrl("piatti-id", New With {.idp = idp})
'qui reindirizzo l'utente, altrimenti vedrei la stessa pagina
Response.Redirect(piattiUrl)


La differenza, sostanzialmente, è che Page.GetRouteUrl si limita a generare il percorso, mentre Response.RedirectToRoute effettua implicitamente pure la ridirezione alla pagina.

ciao, buon weekend!

Enjoy learning and just keep making
25 messaggi dal 30 ottobre 2011
Chiarissimo! Grazie!
ti ringrazio anche per avermi augurato "buon weekend" ma purtroppo sarà un weekend di studio sfrenato sperando di concludere il mio lavoro di tesi.

buon WE a te! ;)

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.