我有一个应用程序,我根据发送的语言环境对请求进行了本地化。例如:/ en / MyController / MyAction。然后我检查发送的语言环境:
if (request.RequestContext.RouteData.Values["locale"] != null)
{
locale = request.RequestContext.RouteData.Values["locale"].ToString();
}
return locale;
除了(似乎)Ajax调用之外,它工作正常。当我通过我的自定义Ajax表单进行AJAX调用HTML帮助程序request.RequestContext.RouteData.Values [“locale”]为空,即使Glimpse显示路径匹配应该是:
{locale}/MyArea/{controller}/{action}/{id}
My Form HTML Helper
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(如果它在请求中存在),GetAppropriateRouteName根据路由值(本地化区域,本地化默认路由或默认路由)返回路由名称。
包含区域设置的Url生成正常,并且还调用了相关操作,但RouteData集合为空并导致本地化回退到默认区域设置。
有什么想法吗?我试过搜索我能想到的一切,但找不到类似的问题。