2

NHibernate を使用する ASP.NET アプリケーションで MVC 2.0 を使用しています。

別のマッピングされたエンティティとの関係を持つエンティティを表示および保存できるNHibernateを使用して、ビュー、コントローラー、およびデータアクセスレイヤーが機能しています。

人 -- > 場所

HTML ヘルパー HTML.DropDownListFor() を使用して、すべての場所のリストを表示しています。ユーザーは、リストからロケーションの 1 つを選択し、保存を押すことができます。

既定のモデル バインダーは、保存される Person エンティティの Location の値を正しく設定します。この場所は nhibernate マップ エンティティであり、インスタンス化され、ドロップダウン リストで選択された ID 値を持ちます。明らかに、場所を保持するドロップダウン リストには場所の ID しかないため、場所の残りの値は null です。これで結構です。既存の場所への参照を使用して Person を保存しようとしているだけです。

したがって、ここで複雑になります。2 つのエンティティ間の関係を変更する必要があります。これで、Person は多くの場所への参照を持つことができます。

Person.Locations は IList になります

私の質問は、デフォルトのモデル バインダーを取得して複数選択ドロップダウンから選択し、 IListに入力するにはどうすればよいかということです。

Phil Haacked によって説明されているように、構文 [index].PropertyName を使用して、過去にエンティティのコレクションを保存することができました .... http://haacked.com/archive/2008/10/23/model-binding-to -a-list.aspx

ここでの問題は、ドロップダウン リストしかなく、異なる値を持つ繰り返しキーをモデル バインダーにポストバックすることです。

Person.Location.Id: 2
Person.Location.Id: 4
Person.Location.Id: 5

残念ながら、これは機能しません。場所リストが Null に戻り続けます。

私たちの UI 担当者は、洗練された JQuery プラグインを使用して選択リスト内の項目を表示しているので、別の UI を使用する必要はありません。

何か案は?

4

1 に答える 1

1

1 つの提案:

リスト項目の名前を「場所」に変更し、アクション メソッドにパラメーターを含めます。string[] locations

MVC が名前を正しく一致させることができれば、選択された項目の配列を受け取るはずです。その後、適切な挿入と削除を使用してデータベースを手動で更新できます。

于 2010-09-13T20:06:17.367 に答える