我在我的ASP.NET MVC3应用程序中遇到了一些路由问题,确切地说是没有按照我的意愿工作。
Global.asax中的路由定义
routes.MapRoute(
"News", // Route name
"{lang}/{controller}/{action}/{page}/{id}", // URL with parameters
new { lang = "pl", controller = "News", action = "Index", page = 1, id = UrlParameter.Optional } // Parameter defaults
);
所以我希望在以下两种情况下使用它:
/{lang}/{controller}/{action}/{page}
- 跳转到特定分页的页面/{lang}/{controller}/{action}/{page}/{id}
- 记录当前页面,并跳转到指定id
的页面。
为了生成链接,我使用以下代码:
@Html.RouteLink(i.ToString(), "News", new { lang = ViewBag.Lang, page = i })
i
表示页码,lang
为语言参数。
在控制器中,我使用Action来处理它:
public ViewResult Index(string lang, int page = 1)
问题
@Html.RouteLink
给了我一个链接 /pl/News/Index/2
(当点击“2”时),但我的控制器没有处理它,页面仍然是“1”。所以当我点击两次相同的链接时,它会给出:/pl/News/Index/2/2
,然后页面等于“2”。
如果有人能够解释一下它是如何工作的,并告诉我该怎么办才能解决这个问题?
非常感谢您的帮助。
id
(可选),难道不应该是Index(string lang, int? id, int page = 1)
吗? :) - Patryk Ćwiekid
参数,我只需要它在其他操作中。 - Mateusz Rogulski/pl/News/Index/2
时,它会触发正确的 Index 动作,但是该动作中 page 的值却为1而不是2。难道没有其他路由与此链接匹配吗? - Juraj Suchár@Html.RouteLink
并给出路由名称,它应该采用特定的路由。但是如果URL不符合规则...它会采用默认值。嗯,我认为这就是问题所在,但我不知道为什么会发生这种情况以及如何更改它。 - Mateusz Rogulski