Проверка на стороне клиента и ValidationSummary отлично работают для моего проекта (MVC4 + Razor + Unobtrusive JS), но ошибки на стороне сервера не отображаются в моем представлении, и если была какая-либо ошибка на стороне клиента, она не удаляется из представления (это делает из ModelState). Я пробовал как на Chrome14, так и на IE9.
Ошибки на стороне сервера добавляются в модель как ModelState.AddModelError(string.Empty, ModelState.AllErrors());
и отображаются в представлении как @Html.ValidationSummary(false)
.
Изменить
Простая отправка формы работает нормально, она показывает несколько сообщений об ошибках, возвращаемых с сервера, и обновляет сообщения об ошибках, но отправка формы на основе ajax не работает, сообщения об ошибках, возвращаемые отправкой формы на основе 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 для этого, может быть лучший способ автоматически обрабатывать этот тип обработки ошибок.