2014-06-05 53 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; }

呢?