2

最近從MVC3升級到4我有一些日期時間的問題。我顯示日期屬性是這樣的:MVC DateTime格式無法解析

<%: Html.DisplayFor(m => m.InvoiceDate, "datetime")%>&nbsp; 

「日期時間」是一個顯示模板,看起來像這樣:

<%@ 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; 

     } 

日期時間在視圖中正確顯示,但是在提交表單時,日期如下所示:「2013年7月20日12:00:00 AM」,DateTimeModelBinder引發格式異常:字符串未被識別作爲有效的日期時間。 (新西蘭的月份和日期是相反的)。

爲什麼它以這種格式回來?爲什麼它不能解析它?爲什麼升級到MVC 4時會發生這種情況?我怎樣才能讓它以新西蘭格式返回?我應該在解析時不指定文化,這是以前MVC版本中可能需要的東西嗎?

回答

0

這是一個棘手的領域。涉及的因素很多。

其中一個原因可能是網絡瀏覽器設置爲美國英語。

如何設置線程的文化信息。您可以使用Thread.CurrentThread.CurrentCulture或在網絡配置<globalization enableClientBasedCulture="true" culture="auto:en-NZ" uiCulture="auto:en"/>中執行此操作。