0

ASP.NET MVC4 で Razor ビューを作成しています。

表示するオブジェクトのリストがあります。現在、データ モデルのリスト用に定義された EditTemplate で @Html.EditorFor() を使用しています。

まず、jquery を使用して編集テンプレートでコントロールを条件付きで表示/非表示にしたいのですが、スクリプトをどこに置くべきか (おそらく編集テンプレートで?)、現在の反復で関連するコントロールのみを選択する方法がわかりません。編集テンプレート。

次に、コントロールの新しいインスタンスを (おそらく AJAX を介して) 生成し、それをクライアント側のリストに追加する追加ボタンが必要です。

誰かが前にこのようなことをしたことがありますか? コントロールなどのクラスに入れることができるように、テンプレート内の反復回数を取得する方法はありますか? コントロールの状態を切り替えることができるように、jquery でそれらを選択できるようにする必要があります。


コードは次のようになります。

メイン ビュー:

@Html.EditorFor(vm => vm.ListOfChildViewModels)
<button type="button" class="btn" id="btnAddViewModel">Add view model</button>

エディター テンプレート:

@MyNamespace.Web.ViewModels.VMType

@Html.DropDownListFor(vm => vm.SelectorProperty, Model.SelectorOptions)

// This checkbox should only get displayed if the dropdown has selectedIndex == 0
@Html.CheckBoxFor(vm => vm.Option1)

// This checkbox should only get displayed if the dropdown has selectedIndex == 1
@Html.CheckBoxFor(vm => vm.Option2)

// Etc...
4

1 に答える 1

0

サーバー側で処理を行って、面倒な作業をそこに置いておくことになりました。ID は、初回は EditTemplate によって自動的に生成されます。リストに追加/リストから削除する必要があるときはいつでも、シリアル化されたフォームを AJAX 呼び出しでサーバーに渡します。次に、サーバーはリクエストを変更し、レンダリングされたリストの HTML を返します。これは、jquery を使用してクライアント側でスワップインおよびスワップアウトできます。

クライアント側バインディングを使用してこの問題を解決することもできましたが、現時点では、サーバー上の C# の方がテストしやすく、安全にコンパイルできます。残念ながら、コストはサーバーへの往復であり、リストを更新するために戻ってきます。

于 2013-11-04T13:23:28.720 に答える