我有一个有几条路线的MVC3应用程序。其中两个定义如下:
routes.MapRoute(
null,
"System/{name}", // URL with parameters
new { controller = "Systems", action = "Index" } // Parameter defaults
);
routes.MapRoute(
null,
"Carrier/{name}", // URL with parameters
new { controller = "Carriers", action = "Index" } // Parameter defaults
);
现在,在我的菜单中,我有两个指向使用Url.Action创建的路径的链接:
Url.Action("Index","Systems")
Url.Action("Index","Carriers")
现在,当我启动应用程序时,一切似乎都很好,菜单中的链接显示为/System/
和/Carrier/
,这是预期值。
但是,当我在网页中浏览例如/System/MySystem
时,我仍然希望链接指向同一个地方,但现在他们指向/System/MySystem
和/Carrier/MySystem
。
我已经尝试过许多方法来保持链接不使用路由值中的名称,但无济于事。我遇到的最奇怪的情况是我试过这个:
Url.Action("Index","Systems", new{name = (string)null})
现在链接显示为
/System?name=MySystem
这里有什么好方法可以确保路由值中的名称值不会以任何方式干扰这些链接吗?
答案 0 :(得分:6)
正如您注意到Url.
帮助程序重用先前给定的路由参数。
作为一种解决方法(我希望有一个更优雅的解决方案......),您可以从视图中的name
中删除RouteData.Values
条目:
所以在你的观点中给你Url.Action
打电话之前:
Url.Action("Index","Systems")
Url.Action("Index","Carriers")
从name
:
RequestContext
@{
Request.RequestContext.RouteData.Values.Remove("name");
}
这也是一种解决方法,但如果您通过为name
段提供默认空值来略微修改路线:
routes.MapRoute(
null,
"System/{name}", // URL with parameters
new { controller = "Systems", action = "Index", name = (string)null }
);
routes.MapRoute(
null,
"Carrier/{name}", // URL with parameters
new { controller = "Carriers", action = "Index", name = (string)null }
);
您的原始解决方案(“归零”name
中的Url.Action
)也会有效:
@Url.Action("Index", "Systems" , new {name = (string)null} )