2012-03-23 9 views
0

私はUserモデルを持っています。これには、Devicesのコレクションが含まれています。ユーザーは任意の数のデバイスを持つことができますが、各デバイスは1つのユーザーしか持てません。ASP.NET MVC3: "Edit"ビューからモデルのコレクションにリストの要素を追加します。

ユーザーを編集するためのページを作成しています。ユーザーのデバイスコレクションを編集する必要がある場合、ビューには、ユーザーに関連付けられたデバイスの表、それぞれの横にリンクを削除するリンク、および現在ユーザーに関連付けられていないデバイスの表、Addリンクが表示されます。ビューは両方のリストを含むビューモデルに型付けされます。

これはすべて部分的な視野の中にあるので、理想的にはAjaxで動的に更新できます。

残念ながら、私はASP.NETとMVC3、そして一般的なWeb開発についてはかなり新しくなっています。これを実装するためのビューを書くにはどうすればいいですか?

これを実装する方法に関する私の前提のほとんどは、thisチュートリアルに基づいています。彼は似たようなことをしていますが、@ Html.EditorForを使用していて、テキストフィールドのユーザタイプを何でも追加して、既存のオブジェクトを選択しません。おそらく、選択されたデバイスのIDをコントローラに送り返す必要があるので、リスト間でデバイスを移動して、更新された部分ビューを返すことができます。しかし、ビューはビューモデルに型付けされています。(私が間違っていない限り)ポスト内のコントローラに任意のデータを返すことはできません。私はビューモデルを送ることしかできません。だから私はそれを返す前に、私は選択したデバイスのIDをビューモデルに配置する必要があるようだが、私はそれを行う場合、私はビュー内のデータを操作することによって全体のMVCパターンに違反している。

これは非常に基本的な問題ですので、解決策はたくさんありますが、残念ながら私は1つを探す方法を知るには十分なドメイン知識がありません。

答えて

1

コントローラに追加のデータを送信することもできます(たとえば、ビューモデルだけでなく)。各アイテムのチェックボックスを作成できるデバイスのリストについては、各チェックボックスに同じ名前と異なる値を設定する必要があります:ユーザーは、(チェックボックスが内側にあると仮定してフォームを送信するとき

<input type="checkbox" name="devices" value="dev1" /> 
<input type="checkbox" name="devices" value="dev2" /> 
<input type="checkbox" name="devices" value="dev3" /> 

お使いのコントローラでは、この方法は、データのリストを受け取ることができます...

public ActionResult UpdateUser(User usermodel,string[] devices){ ... } 

パラメータデバイスは、選択したデバイスIDのリストが含まれていますフォームとユーザーが送信します)。

これはこれを行う方法ですが、確かに他の方法があります。

関連する問題