2017-08-02 25 views
0

我有一個具有可爲空的DateTime屬性的模型。在遠程驗證中使用可爲空的DateTime給出null(ASP .Net MVC)

不需要輸入日期,因此可以爲空類型。但如果它進入IS,它應該被驗證爲及時向前。

對物業的使用遠程驗證然而,總是給人在我的驗證方法中的參數,即使在日期選擇字段包含使用正確的格式值。我怎樣才能得到它來嘗試從我的輸入字段中的值?

日期選擇器日曆限於無法挑選過去的日期。但是您仍然可以手動輸入日期。這樣做會觸發驗證,但始終使用空值作爲參數中的值。我有一個類似的功能,其中DateTime不可爲空並且它可以正常工作。

模型

[Remote("CheckDateNotInPast", "Validation", ErrorMessage = @"The date must lie forward in time.")] 
     public DateTime? Deadline { get; set; } 

驗證控制器

//The date parameter here is always null, even when the field contains a correct value to check. 

public JsonResult CheckDateNotInPast(DateTime? date) 
     { 
      return Json((date == null || DateTime.UtcNow.Date <= date.Date), JsonRequestBehavior.AllowGet); 
     } 

VIEW

<div class="col-sm-5"> 
      @Html.TextBoxFor(m => m.Deadline, new { @placeholder = (Model.Deadline == null ? "YYYY-MM-DD" : Model.Deadline.Value.ToString("yyyy-MM-dd")), @class = "form-control", @id = "datepicker" }) 
      <span class="nais-error-text">@Html.ValidationMessageFor(m => m.Deadline)</span> 
     </div> 

回答

1

您的財產被命名爲Deadline,因此您的控制器方法中的參數必須匹配。將其更改爲

public JsonResult CheckDateNotInPast(DateTime? deadline) 

並且它將被正確傳遞。作爲一個方面說明,您可以使用條件驗證屬性(例如foolproof[GreaterThanOrEqualTo],或者您可以輕鬆創建自己的屬性),以便您的客戶端和服務器端驗證無需額外的ajax調用開銷(在初始驗證之後,將在每個.keyup()事件中默認完成)。

+0

謝謝!這解決了我的問題。我正在考慮將它重用於其他類似的屬性,但不知道命名傳遞。 我也檢查出萬無一失。這似乎是所有這些日期驗證我使用的完美的東西。謝謝! – RKrogh

+0

你也可以參考[ASP.NET MVC 3驗證完整指南 - 第2部分](https://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp。 net-mvc-3-part-2)如果你想學習如何創建你自己的驗證屬性 –