クライアント側の検証と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);
}
編集
VS2010によるテンプレート化されたMVCアプリケーション、ダイアログベースのログインフォームでも同様の機能が見られました。エラーメッセージはJsonとして返され、JSを使用して表示されます。IMOは、MSがAjaxベースのリクエストを非常に簡単かつ簡潔に作成したようです(Ajax.BeginForm
)が、エラー処理の部分がありません。今のところ、これにJSを使用するつもりはありません。このタイプのエラー処理を自動的に処理するための、より良い方法があるかもしれません。