为了允许正确绑定特定于文化的值,我有这个 ModelBinder:
public class CultureAwareModelBinder : DefaultModelBinder {
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
BaseController controller = (BaseController)controllerContext.Controller;
CultureInfo culture = controller.Settings.Culture;
CultureInfo language = controller.Settings.Language;
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = language;
return base.BindModel(controllerContext, bindingContext);
}
}
(是为当前应用程序的用户BaseController.Settings
公开正确的属性)。CultureInfo
我是这样设置的
protected void Application_Start() {
ModelBinders.Binders.DefaultBinder = new CultureAwareModelBinder();
}
当我调试并逐步执行我的代码时,Thread.Culture 设置正确,但是我的模型不断得到错误的值。
这是我的模型:
public class EventModel {
public DateTime Start { get; set; }
public DateTime End { get; set; }
}
当我在我的网络浏览器中为任一字段指定“10/6/2013”并点击提交时,并且当文化为“en-GB”时(并且我检查了线程的 DateTimeFormat 确实设置为dd/MM/yyyy
),MVC 将其接收为2013 年 10 月 6 日,而不是 2013 年 6 月 10 日。
我不知道为什么会这样,不幸的是我无法直接进入实际的模型绑定。为什么不尊重线程文化?