C# 使用DateTime值DataAnnotation限制过去的日期

C# 使用DateTime值DataAnnotation限制过去的日期,c#,html,date,asp.net-mvc-4,datetime,C#,Html,Date,Asp.net Mvc 4,Datetime,我有一个MVC应用程序,其中我有一个带有日期属性的模型 [Required(ErrorMessage = "This is a required field.")] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")] [DataType(DataType.Date)] public DateTime EventDate { get; set; } 在我看来,我是这样说的 <div

我有一个MVC应用程序,其中我有一个带有日期属性的模型

 [Required(ErrorMessage = "This is a required field.")]
        [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
        [DataType(DataType.Date)]
        public DateTime EventDate { get; set; }
在我看来,我是这样说的

  <div class="col-sm-9">
        <span style="color:black">@Html.EditorFor(model => model.EventDate)</span><br />
        @Html.ValidationMessageFor(m => m.EventDate, "", new { @class = "text-danger" })
    </div>
并使用它,但这会删除选择日期的选项

是否可以禁用此Datetime批注上的过去日期

非常感谢您的帮助


谢谢

我想您的支票必须是日期时间。现在(未来日期“大于”今天)。因此,如果它是有效值,则需要返回true。@Styxxy我做了这些更改,它删除了用于选择日期的日历对话框窗口。尝试添加
min
属性:验证属性与表单控件在视图中的显示方式无关-它们用于验证值,如果无效,然后显示一条错误消息。您有
[DataType(DataType.Date)]
与生成浏览器HTML-5日期选择器的
EditorFor()
一起使用。这仅在Chrome和Edge中受支持,在FireFox中只呈现一个文本框。在任何情况下,它都必须是
[DisplayFormat(DataFormatString=“{0:yyyy-MM-dd}”,ApplyFormatInEditMode=true)]
才能正常工作。如果您想要一致的UI并能够限制选择日期,请使用jQuery datepicker(例如,[jQuery UI]datepicker()。另外,您的属性没有提供客户端验证,因为它没有实现
IClientValidable
-请参阅我认为您的检查必须是
d>DateTime。现在
(未来日期“大于”今天)。因此,如果它是有效值,则需要返回true。@Styxxy我做了这些更改,它删除了用于选择日期的日历对话框窗口。尝试添加
min
属性:验证属性与表单控件在视图中的显示方式无关-它们用于验证值,如果无效,则显示error消息。您有
[DataType(DataType.Date)]
EditorFor()
一起生成浏览器HTML-5日期选择器。这仅在Chrome和Edge中受支持,并且在FireFox中只呈现一个文本框。在任何情况下,它必须是
[DisplayFormat(DataFormatString=“{0:yyyyy-MM-dd}”,ApplyFormatInEditMode=true)]
以正确工作。如果您想要一致的UI并能够限制选择日期,请使用jQuery日期选择器(例如[jQuery UI]datepicker()。另外,您的属性不会提供客户端验证,因为它没有实现
IClientValidable
-请参阅
public class MyDateAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        DateTime d = Convert.ToDateTime(value);
        return d > DateTime.Now;

    }
}