【发布时间】:2010-08-16 06:54:54
【问题描述】:
我在使用 asp.net mvc2 的路由基础设施时遇到了很多麻烦。我在 global.asax 文件中注册了以下路线
routes.MapRoute(
"strict",
"{controller}.mvc/{docid}/{action}/{id}",
new { action = "Index", id = "", docid = "" },
new { docid = @"\d+"}
);
routes.MapRoute(
"default",
"{controller}.mvc/{action}/{id}",
new { action = "Index", id = "" },
new { docConstraint = new DocumentConstraint() }
);
问题在于第一条路线(“严格”)。三种 url 可以匹配第一个路由。 mycontroller/23/myaction、mycontroller/23/myaction/12 或 mycontroller/23/mvaction/stringid。如果我尝试在不指定 id 值的情况下使用此路由,则一切正常,例如:
Html.ActionLink("Link text", "ActionName", new{docid = 23});
一切顺利,但如果我使用如下链接:
Html.ActionLink("Link text", "ActionName", new{docid = 23, id = 223})
这将生成绝对正确的 url currentcontroller.mvc/23/ActionName/223,但是当它加载页面时,它会在 jquery1.4.2.min.js 文件中给出 JavaScript 错误。
这很奇怪:如果我将 id 更改为 someid =223 它将反映在查询字符串中,并且不会出现 JS 错误。
编辑:我做了一些进一步的调试,发现当在路由值中同时提到 id 和 docid 时,在 global.asax 中忽略了一件事,即忽略路径。
routes.RouteExistingFiles = false;
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.ignoreRoute 完全被绕过,在我的控制器中调试时,我可以在路由值字典中看到 JS 文件的名称。
【问题讨论】:
标签: asp.net-mvc routing