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

时间:2011-05-09 20:18:01

标签: .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>

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

当然,App_Code中的类中没有Page对象,所以我不能只调用GetRouteUrl。查看docs on msdn我看到的内容看起来很有帮助。

  

提供此方法用于编码   方便。它相当于   打电话给   RouteCollection.GetVirtualPath(RequestContext的,   String,RouteValueDictionary)方法。

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

1 个答案:

答案 0 :(得分:9)

RequestContexta property的形式提供给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;
}