Как я могу указать порядок DataAnnotation ValidationAttribute's? - PullRequest
4 голосов
/ 27 декабря 2010

Вопрос здесь похож, но у меня нет наследования каких-либо доменных объектов. Мои поля и теги проверки имеют следующий порядок, но печатаются только ошибки MustBe18 и «Обязательные». У меня есть несколько других полей в этой модели с гораздо большей проверкой, но порядок ValidationAttribute в коде, похоже, не имеет значения. Кажется, ответ jfar в связанном посте говорит о том, что можно создать помощника, но как? Как можно контролировать заказ?

[Required(ErrorMessage = "This field is required")]
[DisplayName("Date of Birth")]
[MustBeValidDate(ErrorMessage = "Must be a valid date")]
[MustBe18(ErrorMessage = "You must be 18 years old")]
[MustNotBeOver100(ErrorMessage = "This caller is too old")]
public string dob { get; set; }

MustBe18: Атрибут Validation (перегруженный метод IsValid)

try
{
    DateTime dob = new DateTime(DateTime.Now.AddYears(-18).Year, DateTime.Now.Month, DateTime.Now.Day);
    return DateTime.Compare(DateTime.Parse(value.ToString()), dob) <= 0;
}
catch
{
    return false;
}

1 Ответ

3 голосов
/ 27 декабря 2010

Единственный способ указать порядок - создать собственный ModelValidatorProvider , который затем может упорядочить атрибуты.Это, вероятно, будет непросто, потому что вам также необходимо создать перегрузки для каждого атрибута, который принимает параметр Order (не знаю, если они уже это делают).

Если все, что вы не возражаете, это порядок, в котором сводные данные проверкиПокажите, все, что вам нужно сделать, это перебрать записи ModelState и выложить ошибки оттуда.

...