2010-09-13 62 views
2

我在使用NHibernate的ASP.NET應用程序中使用MVC 2.0。MVC默認模型綁定器 - 將多選下拉列表綁定到IList <T>

我使用NHibernate工作視圖,控制器和數據訪問層是能夠顯示和保存實體到另外一個映射實體的關係:

人 - >位置

它使用HTML助手HTML.DropDownListFor()顯示所有位置的列表。用戶可以從列表中選擇一個位置,然後按保存。

默認的模型聯編程序正確設置了要保存的Person實體上的位置值。這個位置是一個nhibernate映射的實體,並且被實例化並具有在下拉列表中選擇的id值。顯然,由於保存位置的下拉列表只包含位置的ID,所以該位置的其餘值爲空。還行吧。我只是想通過引用現有位置來保存該人員。

因此,這裏出現的併發症。我們需要改變這兩個實體之間的關係。現在人可以有許多地點的參考。

Person.Locations將是一個IList

我的問題是,你如何得到默認的模型粘合劑從多選下拉採取選擇和填充一個IList。

我設法使用語法[index] .PropertyName作爲Phil Haacked的解釋來保存過去的實體集合。http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

這裏的問題是,我只有一個下拉列表,它會回發到ModelBinder的不同值的重複鍵:

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

不幸的是,這是行不通的。位置列表不斷返回空值。

我們的用戶界面人員使用一個漂亮的JQuery插件來顯示選擇列表中的項目,所以我寧願不必使用不同的用戶界面。

任何想法?

回答

1

一個建議:

更改列表項的名稱爲「位置」,然後在你的行動方法,包括參數string[] locations

如果MVC能夠正確匹配的名字,你應該接受所選項目的數組。然後您可以手動處理使用適當的插入和刪除來更新數據庫。

+0

由於我發佈,我已經添加了一個單獨的動作方法參數,填充整數數組。然後我手動實例化一個位置,將它們的id設置爲數組中的值,並將它們附加到Person。我想找到一種方法來獲取默認模型聯編程序爲我完成這項工作。 – bzarah 2010-09-14 12:16:49

相關問題