Три метода описаны в ссылке ниже. У меня нет производительности, протестировал их для определения, который является самым быстрым.
Если я правильно понимаю, что вы пытаетесь сделать, мой первый ответ будет отрицательным, вы не можете использовать текущее состояние модели и запрос Ajax. Возможно, вы можете эмулировать поведение ModelState, чтобы отобразить ошибки:
Передача List
(свойство, сообщение) с помощью JSON (для этого вам потребуется передать форму modelErrors modelState в новую структуру) и выполнить HTML-конструкцию сводки проверки с помощью JS / jQuery (что, как мне кажется, излишне убивающее решение).
Если вы собираетесь на сервер и есть какие-либо ошибки, просто выполните рендеринг частично из Html.ValidationSummary ()
, передайте его через JSON и добавьте в форму. Если все в порядке, просто верните представление PartialDetails и замените фактическое содержимое. Для этого потребуется какой-то параметр статуса, чтобы вы знали, что возвращается с сервера при обратном вызове ajax.
РЕДАКТИРОВАТЬ: этот последний вариант звучит хорошо, но сложно, Использование JSON
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues)
{
Dinner dinner = dinnerRepository.GetDinner(id);
try
{
UpdateModel(dinner);
dinnerRepository.Save();
return Json(new
{
result = "success",
html = this.RenderToString("PartialDetails", dinner)
});
}
catch
{
foreach (var issue in dinner.GetRuleViolations())
{
ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
}
return Json(new
{
result = "failed",
html = this.RenderToString("PartialEdit", dinner)
});
}
}
Здесь параметр результата позволит вам узнать, какое действие следует выполнять в каждом случае, просто нужно проверить его в обратном вызове.