在远程验证中使用可空的DateTime给出null(ASP .Net MVC)

时间:2017-08-02 15:37:20

标签: c# asp.net asp.net-mvc validation datepicker

我有一个可以为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>

1 个答案:

答案 0 :(得分:1)

您的属性名为Deadline,因此控制器方法中的参数必须匹配。将其更改为

public JsonResult CheckDateNotInPast(DateTime? deadline)

,它将被正确传递。

作为旁注,您可以使用条件验证属性(例如foolproof [GreaterThanOrEqualTo],或者您可以轻松创建自己的属性),以便获得客户端和服务器端验证而无需ajax调用的额外开销(在初始验证之后,默认情况下将在每个.keyup()事件上完成。)