2012-10-25 3 views
1

저는 다국어 사이트를 운영하고 있으며 각 언어는 고유 한 cultureinfo를 사용합니다. ActionFilterAttribute를 사용하여 culterinfo를 설정하려고 시도했지만 모델 바인딩 후에 실행됩니다. 또한 글로벌 asax BeginRequest 시도했지만 RouteData 아직 사용할 수 없습니다.기본 modelbinder가 잘못된 cultureinfo를 사용합니다.

그래서 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

관련 문제