2014-06-05 84 views
1

使用jQuery datepicker插件用於選擇數據範圍的剃刀形式有兩個日期字段顯示爲文本框。開始日期正常工作,但結束日期未通過驗證,並顯示「字段結束日期必須是日期。」下面是型號代碼和.cshtml代碼:Razor DateField驗證失敗,說「必須是日期」

[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> 

日期選擇器代碼:

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

反正在Chrome中壓倒一切的文化設置?

+3

很可能你在瀏覽器和服務器上有不同的文化。 5月的開始日期是正確的,因爲這一天少於12天(因此2014年6月5日是兩種格式的有效日期:2014年6月5日和2014年5月6日) – 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; }

呢?