Для условной проверки У вас есть несколько вариантов здесь
1) Создайте пользовательский обязательный атрибут, и реализовать логику, необходимую для включения требуемого поля вкл/выкл
public class CustomRequiredAttribute : RequiredAttribute
{
public override IsValid(object val, ValidationContext context)
{
if(SomeConditionisValid())
return base.IsValid(val, context);
else
return true; // the field is valid (e.g not required)
}
}
Это может используется для управления проверкой, если правила могут быть получены из модели. Модель будет доступна от ValidationContext.ObjectInstance
2), вместо вышеизложенного можно реализовать IValidatableObject, который обеспечивает метод можно реализовать для выполнения правил проверки во время привязки модели. Опять же, если вы можете вывести правила проверки целиком из проверяемого объекта.
На вашей модели реализации IValidatableObject
IEnumerable<ValidationResult> Validate(
ValidationContext validationContext
if(SomethingIsInvalid())
yield return new ValidationResult("Something is invalid") { }
)
3) Если вам нужен контекст из внешней модели для выполнения проверки, делать проверку в пользовательской модели связующего, например, наследовать от DefaultModelBinder и переопределять
protected virtual bool OnPropertyValidating(
ControllerContext controllerContext,
ModelBindingContext bindingContext,
PropertyDescriptor propertyDescriptor,
Object value
)
{
if(SomethingIsInvalid())
{
bindingContext.ModelState.AddModelError("Field", "Is Required");
}
base.OnPropertyValidating(controllerContext, bindingContext, propertyDescriptor)
}
Затем зарегистрировать модель связующего для типа
[ModelBinder(typeof(CompanyInfoModelBinder))]
public class CompanyInfoModel
{
}
4) Есть ли в контроллере (не рекомендуется!)
Каковы обстоятельства, которые делают поле обязательным, так как это влияет на ответ? –
Требуется ли «Требуется» на основе значения другого свойства вашей модели? –