猿问

路由和url中的ASP.NETMVC 5文化

路由和url中的ASP.NETMVC 5文化

我已经翻译了我的MVC网站,这是很好的工作。如果我选择另一种语言(荷兰语或英语),内容将被翻译。这是因为我在会话中设置了文化。

现在我想在url中显示所选的区域性(=区域性)。如果它是默认语言,它不应该显示在url中,只有当它不是默认语言时,它才应该显示在url中。

例如:

默认区域性(荷兰语):

site.com/foo
site.com/foo/bar
site.com/foo/bar/5

对于非默认文化(英文):

site.com/en/foo
site.com/en/foo/bar
site.com/en/foo/bar/5

我的问题我总是看到这个:

site.com/nl/foo/bar/5,即使我点击了英语(见_Layout.cs)。我的内容被翻译成英文,但url中的路由参数保留在“nl”而不是“en”上。

我怎么能解决这个问题,或者我做错了什么?

我尝试在global.asax中设置RouteData,但没有帮助。

  public class RouteConfig
  {
    public static void RegisterRoutes(RouteCollection routes)
    {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
      routes.IgnoreRoute("favicon.ico");

      routes.LowercaseUrls = true;

      routes.MapRoute(
        name: "Errors",
        url: "Error/{action}/{code}",
        defaults: new { controller = "Error", action = "Other", code = RouteParameter.Optional }
        );

      routes.MapRoute(
        name: "DefaultWithCulture",
        url: "{culture}/{controller}/{action}/{id}",
        defaults: new { culture = "nl", controller = "Home", action = "Index", id = UrlParameter.Optional },
        constraints: new { culture = "[a-z]{2}" }
        );// or maybe: "[a-z]{2}-[a-z]{2}

      routes.MapRoute(
          name: "Default",
          url: "{controller}/{action}/{id}",
          defaults: new { culture = "nl", controller = "Home", action = "Index", id = UrlParameter.Optional }
      );
    }

Global.asax.cs:

  protected void Application_Start()
    {
      MvcHandler.DisableMvcResponseHeader = true;

      AreaRegistration.RegisterAllAreas();
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
      RouteConfig.RegisterRoutes(RouteTable.Routes);
      BundleConfig.RegisterBundles(BundleTable.Bundles);
    }



慕容森
浏览 511回答 2
2回答
随时随地看视频慕课网APP
我要回答