Могу ли я использовать аннотации данных, чтобы указать необязательное свойство объекта с необходимыми свойствами? - PullRequest
0 голосов
/ 28 января 2019

У меня есть простая модель данных регистрации члена с несколькими обязательными свойствами и некоторыми дополнительными свойствами.Свойство BillToAddress является необязательным.

public class MemberRegistration
{
    [Required(ErrorMessage = "First Name is required.")]
    public string FirstName { get; set; }

    [Required(ErrorMessage = "Last Name is required.")]
    public string LastName { get; set; }

    [Required(ErrorMessage = "Email Address is required.")]
    public string EmailAddress { get; set; }

    public string PhoneNumber { get; set; }

    [Required(ErrorMessage = "Password is required.")]
    [MinLength(7, ErrorMessage = "Password must be at least 7 characters.")]
    public string Password { get; set; }

    private Address m_BillToAddress;
    public Address BillToAddress
    {
        get
        {
            if (m_BillToAddress == null)
            {
                m_BillToAddress = new Address();
            }
            return m_BillToAddress;
        }
    }
}

Если пользователь вводит дополнительный адрес для адреса, я бы хотел указать улицу, город, страну и почтовый индекс.Поэтому я определил модель данных Address, пометив эти свойства как необходимые.

public class Address
{
    [Required(ErrorMessage = "Street Line 1 is required.")]
    public string Street1 { get; set; }

    public string Street2 { get; set; }

    public string Street3 { get; set; }

    public string Street4 { get; set; }

    public string Street5 { get; set; }

    [Required(ErrorMessage = "City is required.")]
    public string City { get; set; }

    [Required(ErrorMessage = "State or Province is required.")]
    public string StateOrProvince { get; set; }

    [Required(ErrorMessage = "Country is required.")]
    public string Country { get; set; }

    [Required(ErrorMessage = "Postal Code is required.")]
    public string PostalCode { get; set; }
}

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

1 Ответ

0 голосов
/ 16 февраля 2019

Проблема была в классе MemberRegistration.Поскольку метод получения свойства BillToAddress всегда возвращал новую пустую модель Address, BillToAddress никогда не был нулевым и всегда правильно вызывал проверку класса Address.Я изменил BillToAddress на простое автоматически реализуемое свойство:

public Address BillToAddress { get; set; }

Теперь, если я публикую MemberRegistion без BillToAddress, он проходит проверку, поскольку BillToAddress является необязательным свойством.

...