2011-05-09 14 views
5

Estoy usando el enrutamiento en asp.net web forms 4.0 con cierto éxito. En mis páginas, uso Page.GetRouteURL para generar rutas como esta.Cómo usar Control.GetRouteUrl desde una clase en App_Code

<a href = '<%=GetRouteUrl("MyRoute", new {MyFirstRouteValue = "ABC", MySecondRouteValue=123}) #>' >Link Text</a> 

Esto funciona perfectamente bien, pero he encontrado que hay veces cuando necesito tener esta funcionalidad en una clase en app_code. Podría simplemente construir manualmente la ruta con String.Format, pero eso es un poco descuidado ya que duplicaría el código en Global.asax que define las rutas.

Por supuesto, no hay ningún objeto de página en una clase en App_Code, así que no puedo simplemente llamar a GetRouteUrl. Mirando hacia arriba en el docs on msdn veo algo que parece útil.

Este método se proporciona para la codificación conveniencia. Es equivalente a llamando al método RouteCollection.GetVirtualPath (RequestContext, String, RouteValueDictionary).

Así que siguieron a los documentos a this page que establece que System.Web.Routing.GetVirtualPath() requiere un objeto System.Web.Routing.RequestContext. Sé sobre el objeto HttpContext, pero no puedo entender qué es RequestContext. Alguien tuvo suerte con esto?

Respuesta

9

RequestContext está disponible como a property al objeto HttpRequest, por lo que puede referirlo como HttpContext.Current.Request.RequestContext. Por ejemplo,

public string GetRouteUrl(string routeName, object routeParameters) 
{ 
    var dict = new RouteValueDictionary(routeParameters); 
    var data = RouteTable.Routes.GetVirtualPath(HttpContext.Current.Request.RequestContext, routeName, dict); 
    if (data != null) 
    { 
     return data.VirtualPath; 
    } 
    return null; 
} 
+1

Gracias Vinay! Eso me ahorró horas de googlear el tiempo! –

Cuestiones relacionadas