Как установить порядок аннотаций валидации в C # - PullRequest
0 голосов
/ 23 сентября 2018

Я ввел две аннотации к атрибуту date.Одним из них является проверка диапазона дат (например, от 1 дня до 15 дней спустя), другим - проверка диапазона времени (например, с 8:30 до 16: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!");
        }
    }
}

1 Ответ

0 голосов
/ 24 сентября 2018

Почему бы не отобразить обе ошибки в сводке проверки?Проверьте это - http://www.tutorialsteacher.com/mvc/htmlhelper-validationsummary

Так что, когда одна ошибка будет завершена, скажем, Time, при сохранении будет отображаться только одна ошибка.

Или вы можете отобразить каждое сообщение об ошибке под виджетом датыкак это

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

Но отображение одной ошибки в данный момент не является хорошей практикой, пользователи, которые должны нажать кнопку «Сохранить», скажут 5 раз, чтобы исправить одну ошибку за раз до того, как будет выполнено окончательное сохранение ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...