2

私の見解では、2 つの部分的な見解があります。

  • 最初の部分ビュー (PV1) : ユーザーはテキスト ボックスに項目を入力し、ajax フォームから送信できます。
  • 2 番目の部分ビュー (PV2) : ユーザーは、以前に送信された項目のリストを表示できます。

PV1 はUpdateTargetIdPV2 の div で使用します。これは、新しく追加された項目でリストを更新するためです。

PV1 で提出されたアイテムが有効な場合、すべてがうまく機能します。ModelState.IsValid == falseajaxフォームが送信されたときに機能しません。UpdateTargetId が PV2 にあるため機能しません。ModelState エラーを表示するには PV1 を更新する必要があります。そのため、PV2 で PV1 の複製が発生しました。

以下は、同様の問題に関する別のスタックオーバーフローの投稿ですが、解決策は提供されていません。

ModelState が無効な場合、ASP.NET MVC AJAX は UpdateTargetId を変更します

Jsonの代替案が解決策になると思いますが、標準のAjax フォームメソッドをここでのニーズに合わせて適応できるかどうか疑問に思っています。

4

1 に答える 1

7

を使用する代わりにUpdateTargetId、次を使用してみてくださいOnComplete

@using (Ajax.BeginForm(new AjaxOptions { OnComplete = "complete" }))
{
    ...
}

このハンドラー内で、結果のビューにエラーがあるかどうかをテストします。

function complete(result) {
    var isError = $('span.field-validation-error', result.responseText).length > 0;
    if (isError) {
        // there was an error => we update the container of the form
        $('#frmContainer').html(result.responseText);
    } else {
        // no error => we hide validation errors and update the result container
        $('#frm .field-validation-error').hide();
        $('#frm .input-validation-error').removeClass('input-validation-error');
        $('#result').html(result.responseText);
    }
}
于 2011-11-07T07:22:58.867 に答える