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; 

     } 

Время представления отображается правильно в представлении, но когда форма отправлена, дата возвращается так: «7/20/2013 12:00:00 AM», а DateTimeModelBinder выбрасывает исключение формата: строка не была распознана как действительный DateTime. (месяц и день - в Новой Зеландии).

Почему он возвращается в этом формате? Почему он не может его разобрать? Почему это произошло при обновлении до MVC 4? Как я могу вернуть его в формате NZ? Должен ли я не указывать культуру при разборе, было ли это что-то, что, возможно, потребовалось в предыдущей версии MVC?

ответ

0

Это сложная область. Есть много факторов.

Одна из причин может заключаться в том, что веб-браузер установлен для американского английского.

Как насчет установки информации о культуре нити. Вы можете сделать это либо с помощью Thread.CurrentThread.CurrentCulture, либо в веб-конфигурации <globalization enableClientBasedCulture="true" culture="auto:en-NZ" uiCulture="auto:en"/>.