我有一个应用程序,我根据发送的语言环境对请求进行了本地化。例如:/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 集合为空,并导致本地化回退到默认语言环境。
有任何想法吗?我已经尝试搜索我能想到的所有内容,但找不到类似的问题。