mvc2.net路由中的环境值

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哪里7docid和以前的网址采摘.

我知道我的行动方法是在docid之后,并且改变它不会清除docid.

我的问题是,我可以docid在这种情况下删除而不改变路线吗?

Eil*_*lon 0

针对这个特殊场景,我有两个建议:

  1. 使用命名路由。该方法的第一个参数MapRoute是名称。要生成链接,请使用Html.RouteLink()(以及其他类似的 API)。这样,您将始终选择您想要的确切路线,而不必担心会选择什么。

  2. 如果您仍然想使用Html.ActionLink(),则显式设置docid=""以清除其值。

  • @Elion是的,我想使用 html.actionlink() 并设置 docid = "" 但这并没有清除它的值。它而是将 docid 附加到查询字符串中。我正在使用 .NET 4 mvc2 RTM 谢谢 (3认同)