Сообщения об ошибках для проверки допустимости модели с помощью аннотирований данных

Учитывая следующие классы:

using System.ComponentModel.DataAnnotations;

public class Book{
   public Contact PrimaryContact{get; set;}
   public Contact SecondaryContact{get; set;}

   [Required(ErrorMessage="Book name is required")]
   public string Name{get; set;}
}
public class Contact{
    [Required(ErrorMessage="Name is required")]
    public string Name{get; set;}
}

Есть ли очевидный способ, из которого я могу дать отличное сообщение об ошибке для каждого экземпляра Contact в Book использование DataAnnotations? Например, если имя отсутствовало в PrimaryContact экземпляр ошибка считала бы "основное контактное лицо, требуется".

Мое текущее решение состоит в том, чтобы создать сервис проверки, который проверяет образцовое состояние на полевые ошибки, затем удалите, сказал, что ошибки и добавляют их назад использование определенного языка, который я хотел бы.

21
задан James 2 March 2018 в 21:34
поделиться

1 ответ

Это единственный способ, которым я знаю об этом, но он далеко не чистый. Он включает использование подклассов и классов MetaData для «переопределения» сообщения об ошибке.

public class Book
{
    public PrimaryContact PrimaryContact { get; set; }
    public SecondaryContact SecondaryContact { get; set; }

    [Required(ErrorMessage = "Book name is required")]
    public string Name { get; set; }
}

public class Contact
{
    [Required(ErrorMessage = "Name is required")]
    public string Name { get; set; }
}

[MetadataType(typeof(PrimaryContactMD))]
public class PrimaryContact : Contact
{
    class PrimaryContactMD
    {
        [Required(ErrorMessage = "Primary Contact Name is required")]
        public string Name { get; set; }
    }
}

[MetadataType(typeof(SecondaryContactMD))]
public class SecondaryContact : Contact
{
    class SecondaryContactMD
    {
        [Required(ErrorMessage = "Secondary Contact Name is required")]
        public string Name { get; set; }
    }
}
39
ответ дан 29 November 2019 в 20:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: