我有评论模型,我正在尝试验证模型,以便 当用户选择日期时,它不能是将来的日期。
Review.cs
public class Review : BaseEntity{
[Key]
public int Id {get; set;}
[Required(ErrorMessage="You need a restaurant name!")]
public string RestaurantName {get; set;}
[What do I put in here??]
public DateTime Date {get; set;}
}
我是新手,documentation有点难以理解。
非常感谢您的帮助。
答案 0 :(得分:4)
您可以创建自定义验证属性,该属性执行自定义逻辑并使用它来装饰您的属性名称。
public class DateLessThanOrEqualToToday : ValidationAttribute
{
public override string FormatErrorMessage(string name)
{
return "Date value should not be a future date";
}
protected override ValidationResult IsValid(object objValue,
ValidationContext validationContext)
{
var dateValue = objValue as DateTime? ?? new DateTime();
//alter this as needed. I am doing the date comparison if the value is not null
if (dateValue.Date > DateTime.Now.Date)
{
return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
}
return ValidationResult.Success;
}
}
现在,在您的视图模型中,使用此新的自定义属性
修饰您的属性名称[DateLessThanOrEqualToToday]
public DateTime Date { get; set; }
此自定义验证属性主要关注您的特定验证逻辑。您可以根据需要更改它以包括更多空检查,最小值检查等。
答案 1 :(得分:0)
您需要为此编写自定义验证程序。例如,您可以根据需要为其命名。
[DateNotInTheFuture]
public DateTime Date { get; set; }
本文详细解释了流程本身:https://msdn.microsoft.com/en-us/library/cc668224.aspx
总结:
答案 2 :(得分:0)
尝试自定义验证或标准模型验证。
第一个选项,设置属性标准数据注释验证的属性:
在屏幕上为show label设置显示属性。
[DataType(DataType.Date), ErrorMessage = "Please enter a correct date format dd/mm/yyyy hh:mm", DisplayFormat( DataFormatString="{0:dd/MM/yyyy}", ApplyFormatInEditMode=true )]
[Range(typeof(DateTime), "1/1/2016", "1/1/2011")]
[Display(Name = "My Date")]
public DateTime Date {get; set;}
第二个选项,自定义验证方法:
您必须扩展 ValidationAttribute 类并覆盖IsValid
:
public class MyDateValidation: ValidationAttribute
{
public override bool IsValid(object value)
{
// check your business date property
DateTime myDatetime;
bool isParsed = DateTime.TryParse((string)value, out myDatetime);
if(!isParsed)
return false;
return true;
}
}
[MyDateValidation(ErrorMessage="Your message")]
public Datetime myDate { get; set; }
有关此主题,请参阅我的其他answer。