我在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() }
);

我的Tabstrip中有一个静态的“dashboard”链接,而其他一些链接是根据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>

现在我的发射地址是localhost/oa.mvc/index/11,显然与第二条路线匹配。但是,当我访问映射到第一条路线的任何页面,然后返回到dash.board链接时,它会向我显示localhost/oa.mvc/7/index/11,其中7docid并从上一个网址中选取。

我知道我的操作方法是在docid之后执行的,更改它不会清除docid。

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

最佳答案

我有同样的“不清算”值(value)问题...

我已进入源代码,但我不明白将段注释为的原因://添加根本不在URL中的所有当前值

@ System\Web\Routing\ParsedRoute.cs,从91行到100行的public BoundUrl Bind(RouteValueDictionary currentValues, RouteValueDictionary values, RouteValueDictionary defaultValues, RouteValueDictionary constraints)方法

虽然清除过程在方法的先前步骤中已正确处理,但是此代码将不需要的参数“重新注入(inject)”到acceptedValues词典中!

关于asp.net-mvc - mvc2.net路由中的环境值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3475981/

10-13 09:20