標準の HTML フォームを簡単に「ハイジャック」して、標準の POST ではなく AJAX 経由で送信できるようにする jQuery プラグインを作成しています。
プラグインが処理する必要があるのは、検証エラーと、ASP.NET MVC の場合はサーバーの ModelState エラーです。
AJAX 要求をインターセプトし、Modelstate エラーを JSON として返すアクション フィルターを作成しました。これは、フィールド エラー (つまり、フォームに入力があるエラー) に対してはうまく機能します。
$.ajax({
url: this.action,
type: "POST",
data: $(this).serialize(),
statusCode: {
400: function (xhr, textStatus, errorThrown) {
var errors = $.parseJSON(xhr.responseText);
validator.showErrors(errors);
}
},
success: function (response) {
window.location.href = "/login/success";
}
});
jQuery Validate関数は、エラー キーに一致するshowErrors
a を持つ入力要素を探します。name
ASP.NET MVC の標準的な規則では、「要約」エラーを提供する場合は次のようにします。
ModelState.AddModelError("", "Error without a key");
これにより、jQuery 検証で例外がスローされます。
これまでに思いついた最善の解決策は、フォームに非表示の入力を作成することです。
<input type="hidden" name="summary" disabled/> <!-- prevent it from being submitted -->
@Html.ValidationMessage("summary")
「概要」エラーを表示する場合は、サーバーで次のコマンドを実行します。
ModelState.AddModelError("summary", "Summary error");
複数のエラーがあるとうまく機能しないため、これは理想的ではありません。より良い解決策は、目立たない検証プラグインが要約エラーを処理する方法にフックすることですが、その方法がわかりません。