[英]Using nullable DateTime in Remote Validation gives null (ASP .Net MVC)
我有一个带有可为空的DateTime属性的模型。
日期不需要输入,因此可以为空。 如果输入,但是,它应该被验证说谎往前赶。
但是,在属性上使用远程验证时,即使datepicker字段包含使用正确格式的值,在我的验证方法中也始终将null作为参数输入。 如何从输入字段中尝试值?
日期选择器日历仅限于无法选择过去的日期。 但是您仍然可以手动输入日期。 这样做会触发验证,但始终以null值作为参数内值。 我有一个类似的功能,其中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);
}
视图
<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>
您的属性名为Deadline
,因此控制器方法中的参数必须匹配。 更改为
public JsonResult CheckDateNotInPast(DateTime? deadline)
它将正确通过。
附带说明一下,您可以使用条件验证属性(例如, 万无一失的 [GreaterThanOrEqualTo]
,也可以轻松创建自己的验证属性),这样您就可以进行客户端和服务器端验证,而无需ajax调用的额外开销初始验证,默认情况下将在每个.keyup()
事件上完成)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.