2

我有一个发布到控制器的常规表单。日期必须以日/月/年格式输入,因为它是针对南美的应用程序。我强制将当前的文化 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 验证也发生变化?

4

1 回答 1

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 解释您的 Date 不正确,您可以执行以下操作:

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() 中。

问候。

于 2012-04-14T18:28:53.607 回答