我有一个常规表单,它被POST到控制器。日期必须以日/月/年格式输入,因为它是南美洲的应用程序。我强迫将当前的文化UI设置为西班牙语 - 秘鲁。试过MVC 3和4 beta。
这是控制器代码:
[HttpPost]
public ActionResult Create(EditPatientViewModel model)
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-PE");
if (ModelState.IsValid) {
// never reaches in here if date submitted as day/month/year
}
}
当我调试并查看ModelState错误时,它们内部的文化仍然设置为en-US,即使我可以验证CurrentThread.CurrentUICulture是否设置为es-PE。
如何使ModelState验证也发生变化?
答案 0 :(得分:4)
将web.config中的全球化设置为es-PE。
<configuration>
<system.web>
<globalization fileEncoding="utf-8"
requestEncoding="utf-8"
responseEncoding="utf-8"
culture="es-PE"
uiCulture="es-PE"/>
</system.web>
</configuration>
它应该可以正常工作,发布和验证。
<强>更新强>
如果由于任何原因,您的ModelState正在解释您的日期不正确,您可以执行以下操作:
ModelState[n].Value.Culture = {es-PE};
在验证发生之前。
<强>更新强>
您也可以更改默认活页夹并自行创建。
public class MyDateTimeBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
var date = value.ConvertTo(typeof(DateTime), CultureInfo.CurrentCulture);
return date;
}
}
把
ModelBinders.Binders.Add(typeof(DateTime), new MyDateTimeBinder());
ModelBinders.Binders.Add(typeof(DateTime?), new MyDateTimeBinder());
在Global.asax的Application_Start()中。
问候。