我有一个可以为null的DateTime属性的模型。
不需要输入日期,因此可以为空。但是,如果输入 IS ,则应该验证它是否能够及时前进。
在属性上使用远程验证,总是在我的验证方法中将 null 作为in-parameter,即使datepicker-field包含使用正确的值格式。如何让我尝试输入字段中的值?
datepicker日历仅限于无法选择过去的日期。但您仍然可以手动输入日期。这样做会触发验证,但始终使用空值作为参数。我有一个类似的功能,其中DateTime不可为空,它可以正常工作。
MODEL
[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);
}
查看
<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>
答案 0 :(得分:1)
您的属性名为Deadline
,因此控制器方法中的参数必须匹配。将其更改为
public JsonResult CheckDateNotInPast(DateTime? deadline)
,它将被正确传递。
作为旁注,您可以使用条件验证属性(例如foolproof [GreaterThanOrEqualTo]
,或者您可以轻松创建自己的属性),以便获得客户端和服务器端验证而无需ajax调用的额外开销(在初始验证之后,默认情况下将在每个.keyup()
事件上完成。)