Сегодня я некоторое время боролся с этим, и это не является строго клиентской проверкой, поскольку требует двусторонней проверки, но позволяет использовать сводку проверки и помощников по сообщениям в стандартном шаблоне. В вашем методе действия контроллера вы просто заключаете свой вызов SaveChanges()
в попытку - поймаете и добавляете полученные ошибки к ModelState
следующим образом:
try {
//This does not pick up fluent validation failures
if (ModelState.IsValid) {
db.Entity.Add(entity);
db.SaveChanges();
//Users want to create loads of my entities without seeing the index...
return RedirectToAction("Create");
}
} catch (DbEntityValidationException e) {
//Log errors
foreach (var result in e.EntityValidationErrors) {
foreach(var error in result.ValidationErrors){
ModelState.AddModelError(error.PropertyName, error.ErrorMessage);
}
}
}
//return to view with current model + validation errors
return View(entity)
Это, конечно, потребует немного больше работы, если вы сохраняете здесь несколько объектов.
Конечно, использование объектов View Model, как полагает Ладислав, было бы правильным подходом, однако я использовал его для поддержки тестового пользовательского интерфейса, запрошенного для тестирования интеграции систем в нисходящем направлении с опережением графика ...