2012-10-19 108 views
0

我正在使用庫存函數在MVC 4 Razor視圖中顯示日期範圍。開始/結束日期是我模型類中過濾器的一部分。我希望開始/結束日期是可選的。不需要的驗證 - jquery datepicker mvc 4

當我提交表單沒有開始/結束填充它觸發「必填字段」驗證檢查顯示這些可愛的消息:

  • 是必需的安裝日期字段。
  • InstalledDateEnd字段是必需的。

然而,表單確實提交,我的過濾器運行並返回結果。

<script> 
    $(function() { 
     $("#InstalledDateStart").datepicker({ 
      defaultDate: "+1w", 
      changeMonth: true, 
      numberOfMonths: 3, 
      onSelect: function (selectedDate) { 
       $("#InstalledDateEnd").datepicker("option", "minDate", selectedDate); 
      } 
     }); 
     $("#InstalledDateEnd").datepicker({ 
      defaultDate: "+1w", 
      changeMonth: true, 
      numberOfMonths: 3, 
      onSelect: function (selectedDate) { 
       $("#InstalledDateStart").datepicker("option", "maxDate", selectedDate); 
      } 
     }); 
    }); 
</script> 

我想告訴這些字段不要求的型號,並沒有幫助:

 [Display(Name = "Installed Date")] 
    [Required(AllowEmptyStrings = true)]   
    public DateTime InstalledDateStart { get; set; } 
    [Required(AllowEmptyStrings = true)] 
    public DateTime InstalledDateEnd { get; set; } 

而且這是在視圖中的標記:

@using (Html.BeginForm("Filter", "Search")) 
{ 

    <div class="divSearchBlock"> 
     <br style="clear:left;" /> 
     <div> 
      <b>@Html.DisplayNameFor(model => model.ConstraintModel.InstalledDateStart)</b>     
      @Html.TextBox("InstalledDateStart", null, new { @class = "divCellContent" })     
      <b>-</b>     
      @Html.TextBox("InstalledDateEnd", null, new { @class = "divCellContent" })     
     </div> 

     <input type="submit" value="Submit"/> 
    </div> 
} 

什麼的世界正在導致這些領域被要求?

回答

1

DateTime s不是字符串。所以AllowEmptyString=true是沒有意義的。如果你希望你的DateTime s到可空聲明模型爲:

[Display(Name = "Installed Date")] 
public DateTime? InstalledDateStart { get; set; } 
public DateTime? InstalledDateEnd { get; set; } 

您需要的?是重要的,因爲沒有這樣的DateTime最終將成爲DateTime.MinValue

+0

我越來越絕望的時候我加入AllowEmptyString。我希望能有像[必需(IsRequired = false)]的選項。我明白他們正在設置DateTime.MinValue,我仍然不明白這是如何觸發客戶端需要驗證,但。儘管日期時間可以爲空。 – nitewulf50

+0

客戶端驗證正在觸發,因爲如果您不讓屬性爲空,不顯眼的驗證會添加一個Required屬性,因爲null或空字符串不是有效的DateTime。通過使它可以爲空,你說如果沒有值輸入,使這個屬性爲空,這很好。 – Liam