我使用asp.net mvc 2並創建基於路由的本地化。ASP.NET MVC Url.Action和路由名稱值
- 我的路線是這樣的:
{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
跳過{culture}
路由參數,當我在參數操作中傳遞值Index
?我究竟做錯了什麼?
路由配置:所有
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ãoAngelo感謝您的回覆,請查找更新 –
@marc_s謝謝,我在所有路線後添加它:r.Url =「{culture} /」+ r.Url; –