【问题标题】:How to set validation annotations order in C#如何在 C# 中设置验证注释顺序
【发布时间】:2018-09-23 16:34:24
【问题描述】:

我在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.net asp.net-mvc validation


【解决方案1】:

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

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

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

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

但是,此时显示一个错误并不是一个好习惯,用户必须点击保存按钮让我们说 5 次以在最终错误清除保存之前纠正一个错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多