我正在使用 asp.net mvc 2 并根据路由创建本地化。
- 我的路线如下:
{culture}/{controller}/{action}
- 我转到我的家庭 Controller :
en/Home/Index
我的家庭 Controller View 有一个到其他 Controller 的链接:
<a href='<%= Url.Action("Prods","Products") %>' >Products</a> <a href='<%= Url.Action("Index","About") %>' >About</a>
第一个链接生成代码:/en/Products/Prods
但第二个链接生成:/Home/Index
我不明白为什么当我在参数操作中传递值 Index
时 Url.Action
会跳过 {culture}
路由参数?我做错了什么?
路线配置:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("Login", // Route name
"{controller}/Index", // URL with parameters
new { controller = "Login", action = "Index" } // Parameter defaults
).RouteHandler = new SingleCultureMvcRouteHandler();
routes.MapRoute("Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
然后
foreach (Route r in routes)
{
if (!(r.RouteHandler is SingleCultureMvcRouteHandler))
{
r.RouteHandler = new MultiCultureMvcRouteHandler();
r.Url = "{culture}/" + r.Url;
if (r.Defaults == null)
{
r.Defaults = new RouteValueDictionary();
}
r.Defaults.Add("culture", "en");
if (r.Constraints == null)
{
r.Constraints = new RouteValueDictionary();
}
r.Constraints.Add("culture", new CultureConstraint(cultures));
}
}
感谢大家的帮助
最佳答案
当生成 URL 时,您最好的选择是始终使用路由名称,因为这样您就不会了解用于选择将用于生成 URL 的路由的算法的微妙之处。
我的建议是不要使用 Url.Action
而是使用 Url.RouteUrl
它允许您指定应该用于构建 URL 的路由名称。
通过始终使用路由名称,您还可以使您的代码对更改更加健壮,例如,您可以添加新路由而不必担心它们可能会破坏您现有的 URL 生成代码。
关于c# - ASP.NET MVC Url.Action 和路由名称值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7938332/