Muh*_*hid 5 asp.net-mvc url-routing
我在我的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() }
);
Run Code Online (Sandbox Code Playgroud)
我的标签条中有一个静态的"仪表板"链接,其中一些其他链接是由db中的值构成的,这里是代码
<ul id="globalnav" class = "t-reset t-tabstrip-items">
<li class="bar" id = "dashboard">
<%=Html.ActionLink("dash.board", "Index", pck.Controller, new{docid =string.Empty,id = pck.PkgID }, new { @class = "here" })%>
</li>
<%
foreach (var md in pck.sysModules)
{
%>
<li class="<%=liClass%>">
<%=Html.ActionLink(md.ModuleName, md.ActionName, pck.Controller, new { docid = md.DocumentID}, new { @class = cls })%>
</li>
<%
}
%>
</ul>
Run Code Online (Sandbox Code Playgroud)
现在我的发布地址localhost/oa.mvc/index/11显然与第二条路线相匹配.但是,当我访问已映射到第一路线的任何页面,然后回过头来dash.board连接它显示我localhost/oa.mvc/7/index/11哪里7是docid和以前的网址采摘.
我知道我的行动方法是在docid之后,并且改变它不会清除docid.
我的问题是,我可以docid在这种情况下删除而不改变路线吗?
针对这个特殊场景,我有两个建议:
使用命名路由。该方法的第一个参数MapRoute是名称。要生成链接,请使用Html.RouteLink()(以及其他类似的 API)。这样,您将始终选择您想要的确切路线,而不必担心会选择什么。
如果您仍然想使用Html.ActionLink(),则显式设置docid=""以清除其值。
| 归档时间: |
|
| 查看次数: |
1328 次 |
| 最近记录: |