如何在全球化MVC5网站后处理AJAX调用?

时间:2018-01-23 08:40:05

标签: ajax asp.net-mvc vb.net globalization

背景

我使用通常的aspnet的MVC5 / razor / jquery继承了一个电子商务网站。我们的目标是对网站进行gobalizating并添加语言选择器,以支持两种主要的国家/语言定位策略。我刚刚完成了第一步,它正在路由网站,以便它处理domain.com/en/,domain.com/es/,domain.com/es-mx / ...使用http://jittuu.com/2014/3/17/AspNet-localization-routing之后,使用不存在的语言环境进入域重定向到默认语言环境。有一个自定义的IRouteHandler获取httprequest,检查语言环境并在需要时放置它:

Public Class LocalizationRedirectRouteHandler
    Implements IRouteHandler

    Public Function GetHttpHandler(requestContext As RequestContext) As IHttpHandler Implements IRouteHandler.GetHttpHandler

        Dim routeValues = requestContext.RouteData.Values
        Dim cookieLocale = requestContext.HttpContext.Request.Cookies("locale")
        If cookieLocale IsNot Nothing Then
            routeValues("culture") = cookieLocale.Value
            Return New RedirectHandler(New UrlHelper(requestContext).RouteUrl(routeValues))
        End If

        Dim uiCulture = CultureInfo.CurrentUICulture
        routeValues("culture") = uiCulture.Name
        Return New RedirectHandler(New UrlHelper(requestContext).RouteUrl(routeValues))

    End Function
End Class

对于没有@Html帮助程序的网站上的路由,有数千个的“内联”AJAX调用,因为项目有单独的捆绑js文件,失败。有数百的路由失败,因为项目控制器正在使用属性路由,并且它没有指定区域设置。例如,指向产品功能的简单链接失败,因为控制器具有指定

的路径
/product/{id}

但网址看起来像

/es-MX/product/{id}

问题:

在这里进行的正确方法是什么?

我期待那些没有语言环境的AJAX和链接被重定向,但它们不是。

我应该重写所有这些文件,以便指定当前的区域设置吗?还有其他“健康”的方法吗,比如扩展BaseController并将文化添加为路由前缀?

提前感谢你的时间,我在这里非常失落。

1 个答案:

答案 0 :(得分:0)

事实证明,@ NightOwl888的this answer是我找到的最接近我遇到的问题的解决方案。将这些更改包含在我的项目之后,我几乎所有的工作都在运行,并在URL上运行了一个精彩的文化前缀。但仍有一些事情要解决:

  1. 我的默认路线在网址中没有文化,可能违反了我们的目标之一。我可以处理那个玩弄(或删除)defaultCulture约束的工作。
  2. js文件中有数百个windows.location,目标是没有文化的路由。我可以通过JS全局变量来存储文化。
  3. 我仍然需要找到一种处理URL本地化的好方法。希望this project能帮助我完成(也由@ NightOwl888指导)。