2012-10-25 51 views
1

我有多語言網站,每種語言都使用自己的cultureinfo。 我試圖用ActionFilterAttribute設置culterinfo,但是它在modelbinding之後被觸發。 我也嘗試過全球asax BeginRequest,但RouteData尚未公佈。默認modelbinder使用錯誤的文化信息

那麼應該在哪裏設置CurrentUICulture到modelBinder也將使用cultureinfo所需?

最大

回答

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); 
    } 
} 

而在你的路線使用routehandler像這樣:

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

謝謝。奇蹟般有效。偉大的聯繫也 – maxlego

+0

一個問題雖然......是否有可能使我的自定義路由處理程序作爲默認routehandler? – maxlego

+0

不要這樣想。但是如果你想確定看看MVC項目中MapRoute擴展方法的源代碼,它是開源的。 – Wim