【发布时间】:2011-12-17 19:25:01
【问题描述】:
我正在使用 asp.net mvc 2 并根据路由创建本地化。
- 我的路线如下:
{culture}/{controller}/{action} - 我去我家的控制器:
en/Home/Index -
我的主控制器视图有一个指向其他控制器的链接:
<a href='<%= Url.Action("Prods","Products") %>' >Products</a> <a href='<%= Url.Action("Index","About") %>' >About</a>
第一个链接生成代码:/en/Products/Prods,但第二个生成代码:/Home/Index
我不明白为什么Url.Action 在参数操作中传递值Index 时会跳过{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));
}
}
感谢大家的帮助
【问题讨论】:
-
如果您包含完整的路线配置,则更容易找到问题。
-
@João Angelo 感谢您的回复,请寻找更新
-
@marc_s 谢谢,我在所有路线之后添加它:r.Url = "{culture}/" + r.Url;
-
查看Phil Haack's Route debugger,这是一个很好的工具,可以帮助您了解选择了哪些路线以及为什么选择...
-
@marc_s 非常感谢有用的路由调试器链接
标签: c# asp.net-mvc asp.net-mvc-2 asp.net-mvc-routing