default modelbinder使用错误的cultureinfo

时间:2012-10-25 08:43:05

标签: c# asp.net-mvc model-binding cultureinfo

我有多语言网站,每种语言都使用自己的cultureinfo。 我尝试使用ActionFilterAttribute设置culterinfo,但是在modelbinding之后触发了它。 我也尝试了全局asax BeginRequest,但还没有RouteData。

那么将CurrentUICulture设置为modelbinder的位置还应该使用cultureinfo吗?

最高

1 个答案:

答案 0 :(得分:2)

您可以在这篇精彩的文章中找到您可以/需要覆盖的内容:An Introduction to ASP.NET MVC Extensibility

您可以编写自定义MvcRouteHandler:

public class LangRouteHandler : MvcRouteHandler
{
    protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        if (requestContext.RouteData.Values.ContainsKey("lang"))
        {
            var culture = new CultureInfo(requestContext.RouteData.Values["lang"].ToString());
            if (culture != null)
            {
                Thread.CurrentThread.CurrentUICulture = culture;
                Thread.CurrentThread.CurrentCulture = culture;
            }
        }

        return base.GetHttpHandler(requestContext);
    }
}

并在您的路线中使用此路线处理程序,如下所示:

routes.MapRoute(
   name: "Default",
   url: "{controller}/{lang}/{action}/{id}",
   defaults: new { controller = "Home", lang = "en", action = "Index", id = UrlParameter.Optional }
).RouteHandler = new LangRouteHandler();