验证输入的日期是否早于今天的日期
本文关键字:日期 今天 输入 是否 验证 于今天 | 更新日期: 2023-09-27 18:34:53
我有一个Html.TextBoxFor元素,用户可以在其中输入他们的出生日期。 我想确保他们只输入比今天的日期早的日期。 这是我在模型中的验证:
[Required(ErrorMessage = "Birthdate is required")]
[RegularExpression(@"^(0[1-9]|1[0-2])'/(0[1-9]|1'd|2'd|3[01])'/(19|20)'d{2}$", ErrorMessage = "Please use MM/DD/YYYY")]
[DataType(DataType.Date)]
public System.DateTime Dob { get; set; }
以下是我观点的相关部分:
<td>
@Html.Label("DOB:")
@Html.TextBoxFor(m => m.Driver.Dob, "{0:dd/MM/yyyy}")
@Html.ValidationMessageFor(m => m.Driver.Dob)
</td>
是否有 .net 提供的内置方法来执行此操作?
创建您自己的自定义属性。
[DateValidation]
public System.DateTime Dob { get; set; }
public class DateValidationAttribute : ValidationAttribute {
public override bool IsValid(object value) {
DateTime dateValue;
var date = DateTime.TryParse(value.toString(), out dateValue);
// "var dateValue = (DateTime) value;" might work as well, let me know what does.
return dateValue < DateTime.Now;
}
}
重要: 属性类的名称应以 Attribute
结尾。
你可以
尝试使用IValidatableObject
...
那么:
public class MyViewModel : IValidatableObject
{
[Required(ErrorMessage = "Birthdate is required")]
[DataType(DataType.Date)]
public System.DateTime Dob { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if(Dob >= DateTime.Today)
yield return new ValidationResult("Dob date should be set in the past", new [] { "Dob" });
}
}
然后到目前为止,只需在控制器中调用ModelState.IsValid
对我来说效果很好,但是如果您遇到任何问题,还有其他答案可以解决这个问题
诚然,在这样简单的情况下,根据 Jeroen 的答案创建自己的属性可能会更好、更容易,但如果您需要任何进一步和/或更复杂的逻辑,甚至可能涉及其他类成员,那么IValidatableObject
是内置的方法。
如果您同意使用 JQuery DatePicker,请点击此链接,更改
@Html.TextBox("", String.Format("{0:yyyy-MM-dd}", Model.HasValue ? Model : DateTime.Today), new { @class = "dp", @readonly = "readonly"})
<script type='text/javascript'>
$(document).ready(function () {
$(".dp").datepicker({
maxDate: new Date,
dateFormat: 'dd/M/yy',
changeYear: true,
changeMonth: true
});
});
</script>