ASP MVC 5客户端validation日期时间范围

我想检查表单中的Datetime字段。 该字段在01/10/2008和01/12/2008之间有效。 以下是我定义viewmodel属性的方法:

[Required(ErrorMessage = "The date value is mandatory")] [DataType(DataType.DateTime)] [Range(typeof(DateTime), "01/10/2008", "01/12/2008")] [DisplayName("When the work starts")] public DateTime StartWork { get; set; } 

我想在客户端validation这一点。 但我总是犯错误。 我给出了值01/11/2008并告诉我,日期必须在01/10/2008和01/12/2008之间定义。 我读到它没有jquery的客户端validation工作,不是吗? 或者我忘了什么? 有什么替代方案可以解决这个问题。

我认为你可以在MVC中使用自定义validation来实现这一点。 试试这个:

 [ValidateDateRange] public DateTime StartWork { get; set; } 

这是您的自定义validation实现:

 namespace MVCApplication { public class ValidateDateRange: ValidationAttribute { protected override ValidationResult IsValid(object value, ValidationContext validationContext) { // your validation logic if (value >= Convert.ToDateTime("01/10/2008") && value <= Convert.ToDateTime("01/12/2008") ) { return ValidationResult.Success; } else { return new ValidationResult("Date is not in given range."); } } } } 

更新:

您还可以将日期范围作为参数传递,以使validation成为通用validation:

 [ValidateDateRange(FirstDate = Convert.ToDateTime("01/10/2008"), SecondDate = Convert.ToDateTime("01/12/2008"))] public DateTime StartWork { get; set; } 

自定义validation:

  namespace MVCApplication { public class ValidateDateRange: ValidationAttribute { public DateTime FirstDate { get; set; } public DateTime SecondDate { get; set; } protected override ValidationResult IsValid(object value, ValidationContext validationContext) { // your validation logic if (value >= FirstDate && value <= SecondDate) { return ValidationResult.Success; } else { return new ValidationResult("Date is not in given range."); } } } } 

更新2 :(对于客户端)一个非常简单的jQuery逻辑应该进行客户端validation。 检查如下:

 $(document).ready(function(){ $("#btnSubmit").click(function(){ var dt = $("#StartWork").val(); var d = new Date(dt); var firstDate = new Date("2008-01-10"); var secondDate = new Date("2008-01-12"); if(d>= firstDate && d<= secondDate) { alert("Success"); } else { alert("Date is not in given range."); } }); }); 

请检查此JSFiddle以查看工作演示: 日期范围validation

您必须在属性上以特定格式指定日期,并且您还要提供该格式的值。 日期输入不喜欢MM/dd/yyyy ,即使这是它显示的格式! 相当迟钝的恕我直言。

您需要添加min和max,如下所示:

结果Html

  

模型

 [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] [DataType(DataType.Date)] public DateTime DOB { get; set; } 

视图

 @Html.EditorFor(model => model.DOB, new { htmlAttributes = new { @class = "form-control", min = "1900-01-01", max = "2015-01-01" } }) 

然后,您将在UI中获得最小或最大错误:

在此处输入图像描述

检查范围日期也可以使用FluentValidation来完成,这可以是您问题的另一种解决方案,请检查我的答案。 希望这可以帮助

日期的MVC模型validation

使用DataFormat属性明确指定日期格式,

 [DisplayFormat(DataFormatString="{0:C}")] 

请参阅MSDN文档