【问题标题】:ASP.NET 4 RouteDictionary does not take the default valuesASP.NET 4 RouteDictionary 不采用默认值
【发布时间】:2013-03-30 03:54:24
【问题描述】:

我在 ASP.NET 4 中有这条路线

routes.MapPageRoute("Professions",     // Route Name  
 "authors/profession/{Profession}/{letter}/page{pager}",  // Url and Parameters  
  "~/Authors/Profession/Default.aspx", true, 
new System.Web.Routing.RouteValueDictionary { { "letter", "a" }, { "pager", "1" } }); // 

如果我访问这样的页面,它会起作用 http://www.mysite.com/authors/profession/actor/a/page1

但这不起作用http://www.mysite.com/authors/profession/actor(它应该自动添加字母'a'和第1页,我做错了什么?

【问题讨论】:

  • 它不会将其“添加”到 url,并且您描述的 url 与该路由不匹配,因为它不遵循正确的格式(即“页面”不存在)。
  • 我怎样才能让它在有和没有 /page 的 url 的情况下工作?并获取默认值?
  • 已在下面提供了答案 - 希望它有所帮助/有效。罗伯

标签: c# asp.net routing


【解决方案1】:

您在这里遇到的问题是路径中的文本“页面”,它作为 after 您的{letter} 令牌(您未在示例网址中提供)。

要让路由引擎匹配该路由,您需要在 url 中的某处同时使用“字母”和 文本“页面”。因此,您的示例 /authors/profession/actor 匹配,而 /authors/profession/actor/a/page 匹配并使用 {pager} 令牌的默认值 1。

我认为解决此问题的最佳方法是以下路线设置:

routes.MapPageRoute("Professions",     // Route Name  
 "authors/profession/{profession}/{letter}/{pager}",  // Url and Parameters  
  "~/Authors/Profession/Default.aspx", true, 
new System.Web.Routing.RouteValueDictionary { { "letter", "a" }, { "pager", "1" } });

基本上,只需将“页面”文本从路径中取出,这样当您拥有/authors/profession/actor 时,它会直接转到字母“a”和页面“1”。完整的网址类似于/authors/profession/actor/d/34

这有意义吗?您的路由是完全有效的,但您总是必须为{letter} 令牌提供一些内容,并在其中包含文本“页面”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2021-03-02
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多