У меня есть класс адресов, подобный следующему:
public class CustomerAddress
{
[Required]
public string Line1 { get; set; }
public string Line2 { get; set; }
[Required]
public string Town { get; set; }
[Required]
public string Postcode { get; set; }
}
И у меня есть модель вида примерно так:
public class CheckoutViewModel
{
[Required]
public string Name { get; set; }
//... etc
public bool DeliverySameAsBilling { get; set; }
public CustomerAddress BillingAddress { get; set; }
public CustomerAddress DeliveryAddress { get; set; }
}
Я хочу, чтобы адрес доставки действовал только при DeliverySameAsBilling
имеет значение false, и из this я вижу, что IValidatableObject может быть подходящим способом.
Этот пример налагает на модель более строгие критерии, чем атрибуты;в моем случае я хочу дополнительно игнорировать атрибуты [Required]
в классе CustomerAddress
.Как мне это сделать?Как бы я подключил соответствующую проверку на стороне клиента?
В качестве альтернативы я мог бы использовать пользовательский атрибут, такой как this для каждого из BillingAddress
и DeliveryAddress
, а затем, возможно, проверка на стороне клиента могла быбыть более легким в обращении;однако я все еще не знаю, как эффективно «отменить» проверку свойства, если DeliverySameAsBilling
истинно.
Что лучше?