San*_*huk 15 c# asp.net-mvc asp.net-mvc-routing asp.net-mvc-2
我正在使用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>
Run Code Online (Sandbox Code Playgroud)第一个链接生成代码:/en/Products/Prods但第二个生成:/Home/Index
当我在参数动作中传递值时,我无法理解为什么Url.Action跳过{culture}route参数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
);
Run Code Online (Sandbox Code Playgroud)
然后
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));
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
Joã*_*elo 45
生成URL时,最好的选择是始终使用路由名称,因为这样您就不会深入了解用于选择将用于生成URL的路由的算法的细微之处.
我的建议是,如果您不使用Url.Action而使用Url.RouteUrl它,则允许您指定应该用于构造URL的路由的名称.
通过始终使用路由名称,您还可以使代码对更改更加健壮,例如,您可以添加新路由,而不必担心它们可能会破坏现有的URL生成代码.
| 归档时间: |
|
| 查看次数: |
26811 次 |
| 最近记录: |