2014-06-05 4 views
1

Имеет форму бритвы с двумя полями даты, отображаемыми в виде текстовых полей, используя плагин jQuery datepicker для выбора диапазона данных. Дата начала работает нормально, но дата окончания не проходит проверку и говорит: «Дата окончания поля должна быть датой». Ниже приведен код модели и код .cshtml:Razor DateField validation failed, говорящий «должно быть датой»

[Display(Name = "Start Date")] 
    public Nullable<DateTime> startDate { get; set; } 

    [Display(Name = "End Date")] 
    public Nullable<DateTime> endDate { get; set; } 

 <div id="dvDateRange"> 
      @Html.TextBoxFor(e => e.startDate, new { @class = "datepicker", Value = Model.startDate.Value.ToString("dd/MM/yyyy") }) 
      <span> to </span> 
      @Html.TextBoxFor(e => e.endDate, new { @class = "datepicker", Value = Model.endDate.Value.ToString("dd/MM/yyyy") }) 
     </div> 

Оба были созданы одинаково, так почему бы дата начала успеха и дата окончания не получится?

Любые идеи?

Редактировать

Так, безусловно, вопрос культуры и, кажется, Chrome, который является причиной проблемы. Сделали следующие изменения и по-прежнему получают такую ​​же проблему.

код модели:

[Display(Name = "Start Date")] 
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
    public Nullable<DateTime> startDate { get; set; } 

    [Display(Name = "End Date")] 
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
    public Nullable<DateTime> endDate { get; set; } 

.cshtml код:

 <div id="dvDateRange"> 
      @Html.EditorFor(e => e.startDate, new { @class = "datepicker", Value = Model.startDate.Value.ToString("dd/MM/yyyy") }) 
      <span> to </span> 
      @Html.EditorFor(e => e.endDate, new { @class = "datepicker", Value = Model.endDate.Value.ToString("dd/MM/yyyy") }) 
     </div> 

Datepicker код:

$("#dvDateRange input").datepicker({ 
     showOn: "button", 
     buttonImage: "/Images/calendar.gif", 
     buttonImageOnly: true, 
     dateFormat: "dd/mm/yy" 
    }); 

Во всяком случае из наиважнейших настроек культуры в Chrome?

+3

Скорее всего, у вас разные культуры в браузере и на сервере. Возможно, дата начала правильная, потому что день меньше 12 (так что 5 июня 2014 года действительная дата в обоих форматах: 05/06/2014 и 06/05/2014) – ssimeonov

+0

Это кажется разумным. Как заставить его использовать формат? – HuwD

+0

Вы можете проверить это http://stackoverflow.com/questions/1328025/jquery-ui-datepicker-change-date-format – ssimeonov

ответ

0

Наконец удалось получить эту работу, используя приведенный ниже код найден в Asp.net MVC set validation date format fails on Chrome

 $.validator.addMethod('date', 
     function (value, element, params) { 
      if (this.optional(element)) { 
       return true; 
      } 

      var ok = true; 
      try { 
       $.datepicker.parseDate('dd/mm/yy', value); 
      } 
      catch (err) { 
       ok = false; 
      } 
      return ok; 
     }); 
1

почему не используется

[Display(Name = "Start Date")] public DateTime? startDate { get; set; }

вместо этого?

Смежные вопросы