Проверка и проверка на стороне клиентаSummary отлично работает для моего проекта (MVC4 + Razor + Unobtrusive JS), но ошибки на стороне сервера не отображаются на моем представлении, и если была какая-либо ошибка на стороне клиента, он не удаляется из представления (он из ModelState). Я пробовал как Chrome14, так и IE9ValidationSummary для ошибок на стороне сервера не работает
Ошибки на стороне сервера добавляются к модели как ModelState.AddModelError(string.Empty, ModelState.AllErrors());
и показаны в виде @Html.ValidationSummary(false)
.
Редактировать
Простой формы представить работают нормально, это показывает несколько сообщений об ошибках возвращаемых из сообщений об ошибках сервера и обновлений, но, Ajax форма на основе представить не работает сообщения об ошибках, возвращаемых АЯКСЕ основе подчиненной формой являются не показан вообще.
Вот пример демонстрации того, как запрос делается
@*... View contents related to Master Model ...*@
@using (Ajax.BeginForm("ActionToAddRecord", new AjaxOptions()))
{
@Html.Action("ActionToAddRecord")
<input type="submit" value="Add Record"/>
}
@*... View contents related to Master Model ...*@
ActionToAddRecord представляет собой частичный вид, представляющий модель, содержащуюся на мастер-модели
Ошибки возвращаются как
[HttpGet]
public ActionResult ActionToAddRecord()
{
return View();
}
[HttpPost]
public ActionResult ActionToAddRecord(childModel model)
{
ModelState.AddModelError(string.Empty, "First error message");
ModelState.AddModelError(string.Empty, "Second error message");
return View(model);
}
Редакция
Я видел аналогичную функциональность в шаблонизированном MVC-приложении VS2010, в форме диалога, основанной на форме журнала. Сообщения об ошибках возвращаются как Json, а затем JS используется для их отображения. IMO похоже на то, что MS сделал запросы на основе Ajax довольно легкими и лаконичными (Ajax.BeginForm
), но при этом отсутствует часть обработки ошибок. Сейчас я не хочу использовать JS для этого, может быть, лучший способ получить этот тип обработки ошибок обработан автоматически.