Предположим, у вас есть viewModel:
public class CreatePersonViewModel
{
[Required]
public bool HasDeliveryAddress {get;set;}
// Should only be validated when HasDeliveryAddress is true
[RequiredIf("HasDeliveryAddress", true)]
public Address Address { get; set; }
}
И модель Address
будет выглядеть так:
public class Address : IValidatableObject
{
[Required]
public string City { get; set; }
[Required]
public string HouseNr { get; set; }
[Required]
public string CountryCode { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[Required]
public string ZipCode { get; set; }
[Required]
public string Street { get; set; }
#region IValidatableObject Members
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
string[] requiredFields;
var results = new List<ValidationResult>();
// some custom validations here (I removed them to keep it simple)
return results;
}
#endregion
}
Кто-то предложил бы создать модель представления для Address и добавить туда некоторую пользовательскую логику, но мне нужен экземпляр Address
, чтобы перейти к моему EditorTemplate для Address.
Основная проблема здесь заключается в том, что проверка адреса выполняется до проверки моей модели PersonViewModel, поэтому я не могу предотвратить ее.
Примечание: RequiredIfAttribute - это пользовательский атрибут, который делает то, что я хочу для простых типов.