2009-06-10 20 views
42

Quando si utilizza il routing ASP.Net, come si può ottenere il RouteData dal code-behind?Come si può accedere a RouteData dal code-behind?

So che puoi ottenerlo dal metodo GetHttpHander di RouteHandler (ti viene consegnato il RequestContext), ma puoi ottenere questo dal code-behind?

C'è qualcosa di simile ...

RequestContext.Current.RouteData.Values["whatever"]; 

... che è possibile accedere a livello globale, come si può fare con HttpContext?

Oppure è necessario accedere a RouteData solo da RouteHandler?

+0

per creare un URL proprio come Url.RouteUrl, è possibile utilizzare il GetRouteUrl-Metodo nel codice -Dopo il file. (So ​​che questa non è una risposta alla tua domanda, ma quando cerco questo problema trovo sempre la tua domanda, quindi forse aiuterà qualcuno. :-) –

risposta

31

È possibile utilizzare il seguente:

RouteTable.Routes.GetRouteData(new HttpContextWrapper(HttpContext.Current)); 
+8

Stai attento, stai chiamando di nuovo nel routing di nuovo e questo è come N numero di richieste che colpiscono la tabella del percorso. –

0

Penso che sia necessario creare un RouteHandler, quindi è possibile inserire i valori in HTTPContext durante l'evento GetHttpHandler.

foreach (var urlParm in requestContext.RouteData.Values) { 
    requestContext.HttpContext.Items[urlParm.Key] = urlParm.Value; 
} 

È possibile trovare ulteriori informazioni in this MSDN article.

139

si potrebbe anche utilizzare il seguente:

//using System.Web; 
HttpContext.Current.Request.RequestContext.RouteData 
+12

Questo è il modo molto più efficace per farlo. –

+0

Spot on @HosamAly – Korayem

+0

Questo non funziona con RenderAction – bendytree

Problemi correlati