0

我在 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页,我做错了什么?

4

1 回答 1

0

您在这里遇到的问题是路径中的文本“页面”,它您的{letter}令牌之后(您没有在示例 url 中提供)。

为了使路由引擎匹配该路由,您需要在 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”。完整的 url 类似于/authors/profession/actor/d/34.

那有意义吗?你的路由是完全有效的,但你总是必须为{letter}令牌提供一些东西,并且在那里也有文本“页面”。

于 2013-04-02T07:29:26.723 回答