2010-10-18 6 views
0

В моей области модели У меня есть объект Person, который имеет ряд свойств, которые я украшенной Validation метаданные:MVC Domain Model Validation

[Required(ErrorMessage = "First Name Required")] 
public string FirstName { get; set; } 

[Required(ErrorMessage = "Age Required")] 
public int Age { get; set; } 

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

Однако из-за метаданных Validation в свойстве Age проверка модели не выполняется, потому что возраст не предоставляется другим лицам в коллекции.

Есть ли способ отключить проверку для других объектов Person в коллекции?

Или мне нужно изменить порядок моделей.

ответ

0

Моим инстинктом было бы украсить действие или контроллер специальным атрибутом, чтобы перехватить проверку запроса. Например, в атрибуте ValidateOnlyFirstPersonInCollection, вы можете переопределить метод OnActionExecuting следующим образом:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    var modelState= filterContext.Controller.ViewData.ModelState; 
    var incomingValues = filterContext.Controller.ValueProvider; 
    // depending on how your app works, 
    // ascertain the Condition that applies when you want the  age field validated 
    // Then: 
    var keys = modelState.Keys.Where(x => ![Condition]); 
    foreach(var key in keys) // These keys don't satisfy the Condition for validation 
    modelState[key].Errors.Clear(); 
} 

Ваша задача теперь сводится к выяснению состояния. Вышесказанное дает вам приблизительную идею. Для получения дополнительной информации см. Книгу Стива Сандерсона по MVC 2, стр. 486.