【发布时间】:2012-06-16 02:35:23
【问题描述】:
我的 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 是语言。
在 Controller 中,我通过 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)吗? :) -
你没有仔细阅读:) 在索引操作中我不使用
id参数,我只在其他操作上需要它。 -
如果我理解正确的话,你点击
/pl/News/Index/2,它会触发正确的Index动作,但是这个动作中page的值是1而不是2。难道没有其他路线可以匹配这个链接吗? -
我想如果我使用
@Html.RouteLink并给出路线名称,它应该采用特定的。但如果 url 不适合规则......它采用默认值。嗯,我认为这是重点,但我不知道为什么会发生以及如何改变它。
标签: c# asp.net-mvc-3 routing global-asax