ModelState Validation Culture on HttpPost
Error messages from ModelState not get localized
我读过这些问题,但他们没有解决我的问题。
我的问题是: ModelState验证errorMessages总是使用英语。本地化不起作用。
LocalizationAttribute.cs文件
public class LocalizationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.RouteData.Values["lang"] != null &&
!string.IsNullOrWhiteSpace(filterContext.RouteData.Values["lang"].ToString()))
{
// set the culture from the route data (url)
string lang = filterContext.RouteData.Values["lang"].ToString();
Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
Thread.CurrentThread.CurrentCulture = new CultureInfo(lang);
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo(lang);
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo(lang);
filterContext.HttpContext.Session.Add("Culture", new CultureInfo(lang));
}
else
{
// get the browser culture
string langHeader = filterContext.HttpContext.Request.UserLanguages[0];
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(langHeader);
Thread.CurrentThread.CurrentCulture = new CultureInfo(langHeader);
filterContext.RouteData.Values["lang"] = langHeader;
}
base.OnActionExecuting(filterContext);
}
}Web.config
<globalization culture="auto" uiCulture="auto" enableClientBasedCulture="false" />Global.asax.cs
public class MvcApplication : HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
AutoMapperConfiguration.Configure();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
BundleConfig.RegisterBundles(BundleTable.Bundles);
// Set the view engine
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new MyCustomViewEngine(SiteSettings.Theme));
}
}FilterConfig.cs
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new LocalizationAttribute());
}
}在启动模型状态错误之前,我需要设置区域性,但我不知道如何做
发布于 2015-02-16 01:10:43
您不会通过LocalizationAttribute实现您想要的结果,因为在OnActionExecuting(ActionExecutingContext filterContext)方法中同时设置Thread.CurrentThread.CurrentUICulture或Thread.CurrentThread.CurrentCulture已经太晚了。
当OnActionExecuting被触发时,程序集区域性已经设置了ModelState错误。
解决方案1
在基本控制器中重写Initialize(System.Web.Routing.RequestContext requestContext)方法,并在Thread.CurrentThread.CurrentUICulture和Thread.CurrentThread.CurrentCulture中设置想要的区域性。
解决方案2
在Application_BeginRequest(object sender, EventArgs e)中重写Global.asax,并在Thread.CurrentThread.CurrentUICulture和Thread.CurrentThread.CurrentCulture中设置所需的区域性。
https://stackoverflow.com/questions/26272913
复制相似问题