2010-12-27 31 views
2

私は彼がいくつかの製品を選択できる顧客オブジェクトのビューを持っています。MVC 2のリストボックスの内容を取得

私の見解では、リストボックス(顧客が選択した製品)を表示してから、クライアント側でアイテムを追加して削除したいと考えています。リストボックスを繰り返し処理してデータベースに保存できるように、リストボックスのすべてのデータをアクションに戻す必要があります。

リスト全体をアクションに戻すにはどうすればよいのですか、アクションのパラメータはどうすればよいですか?

クライアント側では、選択した製品のオプションタグを追加したり削除したりすることができます。

私はモデルバインディングを認識していますが、どのようにオブジェクト構造にリストボックスをバインドできるのかわかりません。

JD

答えて

1

これは高度な解決策ですが、リスト操作のクライアント側でKnockoutを使用すると、MVCの組み込みリストサポートを使用するよりはるかに簡単です。スティーブSandersonはこれを実装する方法について素晴らしいwalk thoughを持っています。 MVC +フォームのみを使用しているwalk thoughも持っています。私は両方の作業をお勧めします。これらのソリューションはいずれも、コンマ区切りの文字列をサーバーにポストするよりもはるかに保守性が高く、拡張性があります。

+0

ありがとうございます。最後の数時間はKnockoutを見ていただけで、DOMを使いこなすことなく、ほとんどのUIを手に入れることができました。 –

1

最も簡単な方法は次のようにあなたの方法は、文字列または整数のリストを受け入れるようにすることです:

public ActionResult About(List<string> products); 

デフォルトのモデルバインダーは、今あなたのリストにすべてのあなたのプロダクトをバインドします。

また同様に、あなたの方法はFormCollectionを受け入れ、あなたのリストボックスの内容を分割することができます:今、すべての製品が含まれています

public ActionResult Products(FormCollection form) 
{ 
    var products = form["Products"].Split(','); 
} 

製品。

+0

こんにちはAlexn、私はまだMVC 2に新しく、html要素にProduct [index] .NameなどのIDが付いている例を見ています。これは.Netコレクションにバインドされます。リストボックスにはIDが1つしかないので、リストボックスの内容をスリットすることによって何を意味するのかはわかりません。また、カスタムモデルのバインダーに関する情報があれば、それ以上感謝します。 –

+0

こんにちは、私の編集を見たかどうかは分かりませんでした。あなたのオプションの値が単一のIDならば、アクションメソッドに 'List 'を受け入れるだけでいいです。デフォルトのモデルバインダーがこれを処理します。私が '、'に分割することによって意味したことは、ブラウザが 'products = 1,2,3'のような形式でデータを送信することです。 – alexn

関連する問題