【问题标题】:How to use Control.GetRouteUrl from a class in App_Code如何使用 App_Code 中的类中的 Control.GetRouteUrl
【发布时间】:2011-08-21 23:18:20
【问题描述】:

我在 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 是什么。有人对此有好运吗?

【问题讨论】:

    标签: .net asp.net routing webforms


    【解决方案1】:

    RequestContext 可作为a 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;
    }
    

    【讨论】:

    • 谢谢维奈!这为我节省了数小时的谷歌搜索时间!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    相关资源
    最近更新 更多