根据选择的语言更改控制器和动作名称
Posted
技术标签:
【中文标题】根据选择的语言更改控制器和动作名称【英文标题】:Change Controller and Action name according to language selected 【发布时间】:2016-04-22 12:03:05 【问题描述】:我有一个控制器,名称为“Hem”,动作名称为“Om”。 我设置了瑞典语的默认语言。 所以路线将在瑞典网站上,它是
/sv/Hem/Om
现在我想通过单击语言部分的英语将语言更改为“en”。 所以路由会像这样自动设置:
/en/Home/About
但功能应该是/sv/Hem/Om
的工作,地址栏中应该显示为/en/Home/About
请各位高手帮帮我。
【问题讨论】:
【参考方案1】:你可以这样做。
routes.MapRoute(
"English route",
"en/controller/action/id"
new controller = "Home", action = "Index", language = "en" ,
);
routes.MapRoute(
"FrenchHome",
"/sv/Hem/Om",
new controller = "Home", action = "Index", language = "fr"
);
或者你可以这样做:
public class GenericRoutes
public string Controller get;set;
public string Action get;set;
public string Urlget;set;
public string RouteNameget;set;
public List<GenericRoutes> Routes = new List<GenericRoutes>();
Routes.Add(new GenericRoutesCotroller="bl",Action="cl",Url="bl/cl")
for(int i=0;i<Routes.count();i++)
routes.MapRoute(
Routes[i].RouteName,
Routes[i].Url,
new controller = Routes[i].Controller, action = Routes[i].Action ,
);
【讨论】:
你的意思是说每一个动作我需要正确两次时间。一个用于英语“en”,另一个用于瑞典语“sv”。 ?你能不能给我一个有效和高效的方法。 已更新。我已经这样做了。我不会知道比这更好的方法。 是的,看起来我可以在没有有效方法的情况下实现我的目标。但是如果你能找到另一个完美的方法,让我给更新。谢谢。(opps我不能放弃upmark) 如果你得到你的答案然后点击右键:)。该方式在 asp.net mvc5 中不可用,但如果您使用 mvc6 则可以查看此博客strathweb.com/2015/11/localized-routes-with-asp-net-5-and-mvc-6 “我不能放弃upmark”这是什么意思?【参考方案2】:首先,我不是专家。但是为了将用户路由到不同的控制器,您可以实现自定义路由并动态配置路由。
要了解路由的工作原理,您可以考虑检查this link。
这是一个快速的技巧:
这里是RegisterRoutes
方法,它为应用程序注册所有路由
public static void RegisterRoutes(RouteCollection routes)
现在从 url 获取当前语言(获取 url 的第一段(在您的情况下为 en))
查询您的数据源以获取当前语言
从数据库或使用 foreach 的任何其他来源在此处添加您的路线。
.
foreach (var route in RouteValues)
route.UniqueName,
routes.MapRoute("prefix/controller/action/id,
new controller = route.Controller , action = route.Action , id = route.Id );
【讨论】:
请您详细说明一下..? 为延迟响应道歉,请参阅更新的答案。【参考方案3】:我个人会避免这种方法用于多语言网站。是的,在技术上可以按照您的要求进行操作,但大多数网站不会以这种方式处理多种语言。 ASP.net 长期以来一直能够本地化页面,我会推荐这种方法。
本地化涉及将资源键放入视图模板中,而不是对字符串进行硬编码。然后,您将设置线程的文化,通常通过 http 接受语言标头,站点将为该文化选择适当的字符串以放入页面视图。您唯一需要维护的是每种语言的字符串集。
这种方法的好处是您只需编写一次视图。当您拥有 2 组甚至 3 组视图时,您就有可能使您的网站的这些版本出现分歧。我个人已经看到这种情况发生,这是一个很难解决的问题。此外,您还可以将您的“语言问题”与您的网站正在解决的任何问题区分开来,这意味着您的域不会被样板代码弄乱,以维持一种花哨的语言切换技术,而不是使用平台附带的解决方案。
如果您有兴趣以正确的方式在 .net 中创建多语言网站,我建议您学习本地化和全球化,这是一个很好的起点:)
Beginners Tutorial
Scott Hanselman tutorial - MVC 3 + Jquery version
【讨论】:
如果你举一个在路由中应用资源的例子会很有帮助。实际上我没有找到任何很好的解决方案来申请路线。 如果 OP 尚未将国际化整合到他的网站中,我会感到非常惊讶。尝试对 url 做同样的事情并没有错,特别是如果它可以有效地完成,即使 大多数 网站不这样做。以上是关于根据选择的语言更改控制器和动作名称的主要内容,如果未能解决你的问题,请参考以下文章