首页 > 解决方案 > 如何在 C# 中设置验证注释顺序

问题描述

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!");
        }
    }
}

标签: c#asp.netasp.net-mvcvalidation

解决方案


为什么不在验证摘要中显示这两个错误?看看这个 - http://www.tutorialsteacher.com/mvc/htmlhelper-validationssummary

所以当一个错误完成时,比如时间,在保存时只会显示一个错误。

或者您可以像这样在日期小部件下方显示每条错误消息

@Html.ValidationMessageFor(model => model.CustomDateRange)
@Html.EditorFor(model => model.CustomDateRange)
...
@Html.ValidationMessageFor(model => model.CustomTimeRange)
@Html.EditorFor(model => model.CustomTimeRange)

但是,此时显示一个错误并不是一个好的做法,用户必须单击保存按钮让我们说 5 次以纠正一个错误,然后才能提交最终的错误清除保存。


推荐阅读