【发布时间】:2013-06-10 06:48:28
【问题描述】:
为了允许正确绑定特定于文化的值,我有这个 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 日收到它。
我不知道为什么会这样,不幸的是我不能源步进入实际的模型绑定。为什么不尊重线程文化?
【问题讨论】:
标签: asp.net-mvc model-binding culture