如何从App_Code中的类使用Control.GetRouteUrl

Joh*_*oge 5 .net asp.net routing webforms

我在asp.net web forms 4.0中使用路由并取得了一些成功.在我的页面中,我使用Page.GetRouteURL来生成这样的路线.

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

这非常有效,但我发现有时我需要在app_code中的类中使用此功能.我可以用String.Format手动构建路由,但这有点草率,因为它会复制定义路由的Global.asax中的代码.

当然,App_Code中的类中没有Page对象,所以我不能只调用GetRouteUrl.查看msdn上文档,我看到一些看起来很有帮助的东西.

提供该方法用于编码方便.它相当于调用RouteCollection.GetVirtualPath(RequestContext,String,RouteValueDictionary)方法.

所以我按照文档到这个页面说明System.Web.Routing.GetVirtualPath()需要一个System.Web.Routing.RequestContext对象.我知道HttpContext对象,但我无法弄清楚RequestContext是什么.有人有运气吗?

Vin*_*ayC 9

RequestContext可用作HttpRequest对象的属性,因此您可以将其引用为HttpContext.Current.Request.RequestContext.例如,

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;
}
Run Code Online (Sandbox Code Playgroud)