Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中设置验证注释顺序#_C#_Asp.net_Asp.net Mvc_Validation - Fatal编程技术网

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次。

我想您必须有一个特殊的组合属性,然后您可以控制顺序和错误消息。