C# 如何在C中设置验证注释顺序#
我在C# 如何在C中设置验证注释顺序#,c#,asp.net,asp.net-mvc,validation,C#,Asp.net,Asp.net Mvc,Validation,我在date属性上引入了两个注释。一个是验证日期范围(例如从1天后到15天后),另一个是验证时间范围(例如从上午8:30到下午4:30)。如果该值不符合这两种验证,我希望网页提示错误消息CustomDateRange,而不是CustomTimeRange。目前,情况正好相反 [Required] [CustomDateRange(ErrorMessage = "Your reservation time should be at least 24 hours and at mos
date
属性上引入了两个注释。一个是验证日期范围(例如从1天后到15天后),另一个是验证时间范围(例如从上午8:30到下午4:30)。如果该值不符合这两种验证,我希望网页提示错误消息CustomDateRange
,而不是CustomTimeRange
。目前,情况正好相反
[Required]
[CustomDateRange(ErrorMessage = "Your reservation time should be at least 24 hours and at most 15 days in advance.")]
[CustomTimeRange]
public DateTime? date { get; set; }
public class CustomDateRangeAttribute : RangeAttribute
{
public CustomDateRangeAttribute() : base(typeof(DateTime), DateTime.Now.AddDays(1).ToString(), DateTime.Now.AddDays(15).ToString())
{ }
}
public class CustomTimeRangeAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
try
{
DateTime dt = (DateTime)value;
TimeSpan ts = dt.TimeOfDay;
TimeSpan start = new TimeSpan(8, 30, 0);
TimeSpan end = new TimeSpan(16, 30, 0);
if (ts >= start && ts <= end)
{
return ValidationResult.Success;
}
else
{
return new ValidationResult("Your reservation time should be with in the openning hours, which is from 8.30am to 4:30pm.");
}
}
catch (Exception e)
{
return new ValidationResult("Invalid time input!");
}
}
}
[必需]
[CustomDateRange(ErrorMessage=“您的预订时间应至少提前24小时,最多提前15天。”)]
[自定义时间范围]
公共约会时间?日期{get;set;}
公共类CustomDateRangeAttribute:RangeAttribute
{
public CustomDateRangeAttribute():base(typeof(DateTime),DateTime.Now.AddDays(1.ToString(),DateTime.Now.AddDays(15.ToString())
{ }
}
公共类CustomTimeRangeAttribute:ValidationAttribute
{
受保护的重写ValidationResult有效(对象值,ValidationContext ValidationContext)
{
尝试
{
DateTime dt=(DateTime)值;
TimeSpan ts=dt.TimeOfDay;
TimeSpan开始=新的TimeSpan(8,30,0);
TimeSpan结束=新的TimeSpan(16,30,0);
如果(ts>=start&&ts为什么不在验证摘要中显示这两个错误?
看看这个-
因此,当一个错误完成时,比如说,在保存时,将只显示一个错误
或者,您可以在日期小部件下面显示每个错误消息,如下所示
@Html.ValidationMessageFor(model => model.CustomDateRange)
@Html.EditorFor(model => model.CustomDateRange)
...
@Html.ValidationMessageFor(model => model.CustomTimeRange)
@Html.EditorFor(model => model.CustomTimeRange)
但是,此时显示一个错误不是一个好的做法,用户必须单击“保存”按钮,比如说,在提交最终错误“清除保存”之前,每次更正一个错误5次。我想您必须有一个特殊的组合属性,然后您可以控制顺序和错误消息。