【问题标题】:Routing ASP.NET MVC URL to url with querystring使用查询字符串将 ASP.NET MVC URL 路由到 url
【发布时间】:2011-05-23 15:36:31
【问题描述】:

我必须将一个漂亮的 ASP.NET MVC URL '/sel/F/61' 映射到一个带有查询字符串参数的 ASPX url,例如 'familydrilldown.aspx?familyid=61'。我尝试将其添加到 global.asax:

routeTable.MapPageRoute(
                "selectorroute", 
                "sel/F/{familyid}", 
                "~/selector/familydrilldown.aspx");

这可行,除了familyid 没有作为查询字符串传递给familydrilldown.aspx。

如何获取 {familyid} 并将其作为查询字符串参数传递给页面 familydrilldown.aspx?

我试过了:

routeTable.MapPageRoute(
                "selectorroute", 
                "sel/F/{familyid}", 
                "~/selector/familydrilldown.aspx?familyid={familyid}");

但当然这并没有真正的工作......

关于如何做到这一点的任何想法?

谢谢!

【问题讨论】:

  • 我遇到了完全相同的问题。如果您在上面使用的语法确实有效,那肯定会很好!照原样,我有很多代码首先查找查询字符串,然后查找路由数据。如果有一天我感到无聊,也许我会研究 Lud 解决方案的通用版本。

标签: asp.net-mvc forms asp.net-mvc-routing


【解决方案1】:

我通过实现自己的 IRouteHandler 找到了解决方案:

public class SelectorRouteHandler<T> : IRouteHandler 
    where T : IHttpHandler, new()
{                                      
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        string queryString = 
            "?familyid=" + requestContext.RouteData.Values["familyid"];

        HttpContext.Current.RewritePath(
            string.Concat("~/selector/familydrilldown.aspx", queryString));

        var page = BuildManager.CreateInstanceFromVirtualPath(
            "~/selector/familydrilldown.aspx", typeof(T)) as IHttpHandler;

        return page;                    
    }
}

并像这样注册它:

routeTable.Add(
    "selectorRoute", 
    new Route("sel/F/{familyid}", SelectorRouteHandler<Page>()));

【讨论】:

  • +1,但只是一个注释,您还可以通过requestContext.HttpContext 获取HttpContext 对象。我想这两种实现大致相当,但对我来说,使用requestContext 对象感觉更好。
【解决方案2】:

我不知道你想要的是否可能。 你为什么不直接使用?

var familyId = Page.RouteData.Values["familyid"]

在 Page_Load 中(可能涉及一些强制转换)

【讨论】:

  • 感谢您的评论。 aspx 页面已经存在,所以如果我们不需要更改它们会很好......目前它们使用 Request.QueryString 对象......
猜你喜欢
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
相关资源
最近更新 更多