根据所选语言更改控制器和操作名称

本文关键字:控制器 操作 语言 | 更新日期: 2023-09-27 18:30:51

我有一个控制器,名称为"Hem",操作名称为"Om"。我设置了瑞典语的默认语言。所以路线将在瑞典网站上,它是

/sv/Hem/Om

现在我想通过在语言部分中单击英语将语言更改为"en"。所以路由会像这样自动设置:

/en/Home/About

但是功能应该是/sv/Hem/Om的工作,并且地址栏中应显示为/en/Home/About

专家,请您帮助我。

根据所选语言更改控制器和操作名称

你可以

这样做。

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 Url{get;set;}
    public string RouteName{get;set;}
}
public List<GenericRoutes> Routes = new List<GenericRoutes>();
Routes.Add(new GenericRoutes{Cotroller="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 },
    );
}

我个人会避免使用多语言网站的方法。是的,从技术上讲,可以按照您的要求进行操作,但大多数网站不会以这种方式处理多种语言。ASP.net 长期以来一直有能力本地化页面,我建议使用这种方法。

本地化涉及将资源键放在视图模板中,而不是对字符串进行硬编码。然后,您将设置线程的区域性,通常是通过 http 接受语言标头,站点将为该区域性选择适当的字符串以放入页面视图中。然后,您唯一需要维护的是每种语言的字符串集。

此方法的好处是只需编写一次视图。当您有 2 甚至 3 组视图时,您冒着网站这些版本出现分歧的风险。我个人已经看到这种情况发生,这是一个很难摆脱的问题。此外,您还可以将"语言问题"与网站正在解决的任何问题分开,这意味着您的域不会充满样板代码以保持花哨的语言切换技术,而不是使用平台中包含的解决方案。

如果您有兴趣以正确的方式在.net中制作多语言网站,我建议您学习本地化和全球化,这是一个很好的起点:)

初学者教程

Scott Hanselman 教程 - MVC 3 + Jquery 版本

首先,我不是专家。但是为了将用户路由到不同的控制器,您可以实现自定义路由并动态配置路由。

要了解路由的工作原理,您可以考虑查看此链接。

这是一个快速的技巧:

这是RegisterRoutes注册所有路由以供应用程序

的方法
public static void RegisterRoutes(RouteCollection routes)
{}
  1. 现在从 URL 获取当前语言(获取 URL 的第一段(在您的例子中为 en))

  2. 查询数据源以获取当前语言

  3. 使用 foreach 从数据库或任何其他来源在此处添加您的路由。

.

foreach (var route in RouteValues)
{
    route.UniqueName,
    routes.MapRoute("prefix/{controller}/{action}/{id}, 
       new { controller = route.Controller , action = route.Action , id = route.Id  });
}