2012-01-24 7 views
1

Следуя статье http://www.thekip.nl/2011/09/22/using-fluentvalidation-for-both-domain-validation-and-validation-in-mvc-projects/ для меня, пока неясно, где эта проверка появляется в приложении: на стороне клиента с использованием ModelState.IsValid? Или он может использоваться внутри контроллера?Проверка в ASP.NET MVC. FluentValidationModelProvider

EDIT

Ok. Таким образом, для данного примера

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(Dinner dinner) { 
    if(ModelState.IsValid) { 
     try { 
      dinner.HostedBy = "SomeUser"; 

      dinnerRepository.Add(dinner); 
      dinnerRepository.Save(); 

      return RedirectToAction("Details", new {id = dinner.DinnerID }); 
     } catch { 
      ModelState.AddRuleViolations(dinner.GetRuleViolations()); 
     } 
    } 
    return View(dinner); 
} 

ModelState соответствует Dinner сущности?

Спасибо!

ответ

2

ModelState всегда соответствует системе привязки модели. Для любого параметра, который вы получили, и любых ошибок проверки при его привязке, заполняется ModelState. ModelState, конечно, на стороне сервера, и нет возможности проверить его на стороне клиента. Вы должны и можете проверить это только на контроллере.

Образец, который вы опубликовали в качестве примера, является утвержденным шаблоном для обработки сообщений в asp.net mvc. Первая проверка для ModelState.IsValid дает вам информацию о том, были ли отправленные клиентом значения ошибок проверки cotain или нет. Если есть ошибки, вы возвращаете одинаковый вид для клиента, чтобы проверить значения и исправить их. Если введенные значения действительны, ModelState.IsValid возвращает true, и вы пытаетесь сохранить его в репозитории. Но этот репозиторий также может выполнить свою внутреннюю проверку дополнительно и бросить FluentValidation.ValidationException. Вот где вам нужно поймать - поймать это исключение проверки и добавить его в ModelState, так что система может MVC показать ошибки проверки клиента

Modify, что поймать немного

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(Dinner dinner) { 
    if(ModelState.IsValid) { 
     try { 
      dinner.HostedBy = "SomeUser"; 

      dinnerRepository.Add(dinner); 
      dinnerRepository.Save(); 

      return RedirectToAction("Details", new {id = dinner.DinnerID }); 
     } 
     catch(ValidationException ex) 
     { 
      ValidationResult result = new ValidationResult(ex.Errors); 
      result.AddToModelState(ModelState, string.Empty); 
     } 
    } 
    return View(dinner); 
} 
+0

Ok! Благодаря! Это было ясно) – lexeme

Смежные вопросы