1

標準の 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関数は、エラー キーに一致するshowErrorsa を持つ入力要素を探します。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");  

複数のエラーがあるとうまく機能しないため、これは理想的ではありません。より良い解決策は、目立たない検証プラグインが要約エラーを処理する方法にフックすることですが、その方法がわかりません。

4

0 に答える 0