2013-06-10 5 views
0

에서 모델 결합 현재 응용 프로그램 사용자). 내가 디버깅 및 스텝을 할 때 내 코드는 Thread.Culture가 올바르게 설정되고 Thread.Culture 나는이 ModelBinder를이 제대로 준수 할 문화 고유의 값을 허용하려면 MVC2

나는 그러나 나의 모델이 잘못된 값을 받고 계속, 그래서

protected void Application_Start() { 
    ModelBinders.Binders.DefaultBinder = new CultureAwareModelBinder(); 
} 

처럼 설정합니다. 내 웹 브라우저 중 하나를 필드에 "2013년 10월 6일"를 지정하고 명중 제출하고 문화는 "-GB EN"을 (때와 때

public class EventModel { 

    public DateTime Start { get; set; } 
    public DateTime End { get; set; } 
} 

:

내 모델입니다 스레드의 DateTimeFormat이 실제로 dd/MM/yyyy으로 설정되어 있는지 확인했습니다. MVC는 2013 년 6 월 10 일이 아닌 2013 년 10 월 6 일부터 MVC를받습니다.

왜 이런 일이 발생하는지 잘 모릅니다. 실제 모델 바인딩으로 스레드 문화를 존중하지 않는 이유는 무엇입니까?

답변

1

그것은 모델 바인더에 현재 문화를 설정 너무 늦은 방법입니다. 이것은 실행 파이프 라인에서 훨씬 일찍 완료되어야합니다. 예를 들어 Global.asaxApplication_BeginRequest 이벤트에서

+2

문화권은 사용자별로 다르다. ASP.NET은 현재 사용자에 대한 정보를 가지기 전에'Application_BeginRequest'를 사용하기 때문에 대신'PostAcquireRequestState'에 스레드 문화권을 설정하면 제대로 작동하는 것 같습니다. ActionFilter 나 바인더가이 문제를 해결할 수 없다는 것은 실망 스럽습니다. – Dai

0

나는 똑같은 문제에 직면했다. 내 솔루션은 DefaultModelBinder하지만 ActionFilter을 사용하여 원하는 문화권을 설정하는 대신 동일한 효과가있는 IAuthorizationFilter을 사용했지만 모델 바인딩 후에 실행되는 'ActionFilter'와 달리 모델 바인딩 전에 실행됩니다.

나는 약간의 우아하고 정교하지 않은 사용을 인정하지만 IAuthorizationFilter 그러나 그것은 속임수였습니다.