我在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
,其中7
是docid
并从上一个网址中选取。我知道我的操作方法是在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/