На стороне клиента Validation and 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, возможно, есть лучший способ автоматически обработать этот тип ошибок.