Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在远程验证中使用可为null的DateTime会给出null(ASP.Net MVC)_C#_Asp.net_Asp.net Mvc_Validation_Datepicker - Fatal编程技术网

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

C# 在远程验证中使用可为null的DateTime会给出null(ASP.Net MVC),c#,asp.net,asp.net-mvc,validation,datepicker,C#,Asp.net,Asp.net Mvc,Validation,Datepicker,我有一个具有可空DateTime属性的模型 不需要输入日期,因此为可空类型。但是,如果输入,则应验证它是否在时间上向前 但是,在属性上使用远程验证时,在我的验证方法中始终将null作为in参数,即使datepicker字段包含使用正确格式的值。如何让它尝试输入字段中的值 日期选择器日历仅限于不能拾取过去的日期。但您仍然可以手动输入日期。这样做会触发验证,但始终使用空值作为参数。我有一个类似的函数,其中DateTime不可为空,并且工作正常 型号 [Remote("CheckDateNotInPa

我有一个具有可空DateTime属性的模型

不需要输入日期,因此为可空类型。但是,如果输入,则应验证它是否在时间上向前

但是,在属性上使用远程验证时,在我的验证方法中始终将null作为in参数,即使datepicker字段包含使用正确格式的值。如何让它尝试输入字段中的值

日期选择器日历仅限于不能拾取过去的日期。但您仍然可以手动输入日期。这样做会触发验证,但始终使用空值作为参数。我有一个类似的函数,其中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);
        }
//此处的日期参数始终为空,即使该字段包含要检查的正确值也是如此。
公共JsonResult CheckDateNotInPast(日期时间?日期)
{
返回Json((date==null | | | DateTime.UtcNow.date m.Deadline,new{@placeholder=(Model.Deadline==null?“YYYY-MM-DD”):Model.Deadline.Value.ToString(“YYYY-MM-DD”),@class=“form control”,@id=“datepicker”})
@Html.ValidationMessageFor(m=>m.Deadline)

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

public JsonResult CheckDateNotInPast(DateTime? deadline)
它将被正确地通过


作为补充说明,您可以使用条件验证属性(例如
[GreaterThanOrEqualTo]
,或者您可以轻松创建自己的属性),这样您就可以获得客户端和服务器端验证,而无需ajax调用的额外开销(初始验证之后,默认情况下将在每个
.keyup()
事件上执行此操作).

谢谢!这解决了我的问题。我曾考虑将其用于其他类似属性,但不知道命名转换。我还检查了万无一失。它似乎是用于我所有这些日期验证的完美工具。谢谢!如果您想了解如何创建自己的验证属性,也可以参考
public JsonResult CheckDateNotInPast(DateTime? deadline)