最近从 MVC3 升级到 4 后,我遇到了一些日期时间问题。我显示这样的日期属性:
<%: Html.DisplayFor(m => m.InvoiceDate, "datetime")%>
"datetime" 是一个显示模板,如下所示:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime?>" %>
<%: Model.HasValue ? Model.Value.ToString("dd/MM/yy", null) : ""%>
在我的 global.asax 文件中,我注册了以下模型绑定器:
ModelBinders.Binders.Add(typeof(DateTime), new SMEEDI.Portal.Common.DateTimeModelBinder());
ModelBinders.Binders.Add(typeof(DateTime?), new SMEEDI.Portal.Common.DateTimeModelBinder());
看起来像这样:
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var date = bindingContext.ValueProvider.GetValue(bindingContext.ModelName).AttemptedValue;
if (String.IsNullOrEmpty(date))
return null;
bindingContext.ModelState.SetModelValue(bindingContext.ModelName, bindingContext.ValueProvider.GetValue(bindingContext.ModelName));
try
{
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-NZ");
return DateTime.Parse(date, CultureInfo.CurrentCulture.DateTimeFormat);
}
catch (Exception)
{
bindingContext.ModelState.AddModelError(bindingContext.ModelName, String.Format("\"{0}\" is invalid.", bindingContext.ModelName));
return null;
}
日期时间在视图中正确显示,但是当提交表单时,日期返回如下:“7/20/2013 12:00:00 AM”并且 DateTimeModelBinder 抛出格式异常:字符串未被识别为有效的日期时间。(在新西兰,月份和日期是相反的)。
为什么它会以这种格式返回?为什么它不能解析它?为什么升级到 MVC 4 时会发生这种情况?我怎样才能让它以 NZ 格式返回?我是否应该在解析时不指定文化,这是以前的 MVC 版本中可能需要的吗?