繁体   English   中英

在远程验证中使用可为null的DateTime会提供null(ASP .Net MVC)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM