2015-08-24 4 views
0

Я использую ASP.NET MVC 5 с ASP.NET 4.51. Я пытаюсь проверить мои даты как dd/MM/yyyy, например. 31/01/1960, но проверка модели продолжает говорить мне, что это неверная дата.MVC Date Culture Issue

Следующие предложения от других SO сообщений:

У меня есть следующие в моем web.config:

<system.web> 
    <globalization uiCulture="en" culture="en-AU" /> 
</system.web> 

мой взгляд модель выглядит это:

public class PassengerItem 
{ 
    public PassengerItem() 
    { 
     DateOfBirth = new DateTime(1960, 1, 1); 
    } 

    [Required] 
    [DataType(DataType.Date)] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] 
    public DateTime DateOfBirth { get; set; } 
} 

public class BookingProcessViewModel 
{ 
    /// <summary> 
    ///  Class constructor 
    /// </summary> 
    public BookingProcessViewModel() 
    { 
     ErrorMessages = new List<string>(); 
     Passengers = new List<PassengerItem>(); 

     //Populate with 10 passengers. We show/hide these in the view. Currently we only allow a max of 4 pax to be booked at a time 
     for (int i = 0; i < 4; i++) 
     { 
      Passengers.Add(new PassengerItem()); 
     } 
    } 

    public List<PassengerItem> Passengers { get; set; } 
} 

и контроллер удара с а именно POST:

[HttpPost] 
    public ActionResult Process(BookingProcessViewModel aViewModel) 
    { 
    } 

, но я всегда получаю следующее сообщение об ошибке в модели состояния:

enter image description here

Ввод данных для дата выполняется с использованием jQueryUI со следующим HTML:

<input aria-invalid="false" class="form-control hasDatepicker valid" 
data-jqui-dpicker-changemonth="True" 
data-jqui-dpicker-changeyear="True" 
data-jqui-dpicker-constraininput="True" 
data-jqui-dpicker-dateformat="dd/mm/yy" 
data-jqui-dpicker-defaultdate="01/01/1901" 
data-jqui-dpicker-maxdate="24/08/2015" 
data-jqui-type="datepicker" id="Passengers_0__DateOfBirth" 
name="Passengers[0].DateOfBirth" value="31/01/1960" type="text"> 

Итак, проверка на стороне клиента проходит, но на стороне сервера есть проблема, и я просто не могу понять это. Это сводит меня с ума. Может ли кто-нибудь пролить свет?

ответ

1

Изменить Вы web.config файл (оба должны быть en-AU)

globalization uiCulture="en-AU" culture="en-AU" /> 

DefaultModelBinder использует значение uiCulture для преобразования значения в DateTime (уведомление в скриншоте, что его Culture: {en}

Side Примечание. У вас есть [DataType(DataType.Date)], который будет генерировать браузер HTML5 datepicker, если вы используете @Html.EditorFor(), что означает, что вам нужно использовать DataFormatString = "{0:yyyy-MM-dd}", чтобы он работал правильно.

+0

Изменен файл web.config для культуры = "en-AU", но это не имеет никакого значения. Я использую jQueryUI для всплывающего выбора даты, поэтому не EditorFor. Я включил соответствующий HTML, который был создан для этого в моем исходном сообщении. – TheEdge

+0

Прекрасно работает для меня. Проверьте свой снимок экрана - это теперь 'Культура: {en-AU}'? Обратите внимание, что представление не имеет ничего общего с проблемой - его передача «31/1/1960» с допустимой строкой даты для австралийской культуры (и поскольку вы используете плагин jquery, нет реальной необходимости в '[DataType (DataType .Date)] ', единственной целью которой является отображение атрибута' type = "date" ') –

+0

Хммм. По какой-то причине культура по-прежнему Культура: {en}. Проверено дважды, и веб-конфиг определенно . Могу ли я установить культуру в коде? – TheEdge