2

我有一个应用程序,我根据发送的语言环境对请求进行了本地化。例如:/en/MyController/MyAction。然后我检查发送的语言环境:

        if (request.RequestContext.RouteData.Values["locale"] != null)
        {
            locale = request.RequestContext.RouteData.Values["locale"].ToString();
        }

        return locale;

这很好用,除了(似乎)Ajax 调用。当我通过我的自定义 Ajax 表单 HTML 助手 request.RequestContext.RouteData.Values["locale"] 进行 AJAX 调用时,即使 Glimpse 显示路由匹配,它也为 null:

 {locale}/MyArea/{controller}/{action}/{id}

我的表单 HTML 助手

    public static MvcForm BeginFormLocalized(this AjaxHelper ajax, string action, object routeValues, AjaxOptions options)
    {
        RouteValueDictionary routeDictionary = UrlHelpers.BuildLocalizedRouteValuesDictionary(ajax.ViewContext.RequestContext, routeValues);
        routeDictionary.Add("action", action);
        string routeName = UrlHelpers.GetAppropriateRouteName(routeDictionary);

        return ajax.BeginRouteForm(routeName, routeDictionary, options);
    }

BuildLocalizedRouteValuesDictionary 将区域设置添加到 RouteValuesDictionary 如果它存在于请求中并且 GetApppropriateRouteName 根据路由值(本地化区域、本地化默认或默认路由)返回路由名称。

包含语言环境的 URL 生成良好,并且还调用了正确的操作,但 RouteData 集合为空,并导致本地化回退到默认语言环境。

有任何想法吗?我已经尝试搜索我能想到的所有内容,但找不到类似的问题。

4

0 回答 0