2

基本的な情報を編集するために使用される単純なビューがあります。データが不要な場合は、「NA」チェックボックスです。

   @Html.TextBoxFor(m => m.PersonInfo[i].Reference, "Enter a reference", new { disabled = Model.PersonInfo[i].NotApplicable }) 

   @Html.CheckBoxFor(m => m.PersonInfo[i].NotApplicable, new
       {
           onclick = "ChangeEnabledState(" + i + ");"

       })

ユーザーが NA チェックボックスをクリックすると、そのユーザーのすべてのコントロールを無効にする JavaScript 関数が呼び出されます。

次のシナリオに問題があります。

  1. ユーザーが新しい「個人情報」を作成し、それを NA に設定します (すべてのフィールドが無効になります)
  2. その後、ユーザーは編集ビューに戻り、チェックボックスをオフにします (ビューを有効にします)。
  3. ユーザーがテキストボックスの 1 つに無効なデータを入力しました
  4. ユーザーが保存をクリックすると、検証が失敗し、エラーがモデルに追加されます
  5. 無効にするテキストボックスはモデルに基づいて設定されているため、無効になっていますが、チェックボックスはチェックされています。そのため、ユーザーはチェックボックスを 2 回クリックして再度有効にする必要があります。

上記のシナリオでフィールドが無効にならないように、ビューモデルを更新するクリーンな方法はありますか。チェックボックスをチェックして有効/無効にするためにjquery document.readyをすでに試しましたが、もっとエレガントな解決策が必要だと感じています。

4

1 に答える 1

0

Ajaxフォームを使用する場合は、AjaxOptionsと呼ばれるパラメーターがあります。AjaxOptionsの場合、OnBegin、OnSucces、OnComplete、OnSucces、OnFailureを定義できます。

ここでは、リクエストの開始時、終了時、または質問のように検証が失敗したときに呼び出されるjavascript関数を渡すことができます。

@using (Ajax.BeginForm("MethodName", "ControllerName", new AjaxOptions { OnFailure="EnableForm()" })
于 2012-11-19T08:22:13.983 に答える