2

我在使用 NHibernate 的 ASP.NET 应用程序中使用 MVC 2.0。

我有一个使用 NHibernate 的工作视图、控制器和数据访问层,它能够显示和保存与另一个映射实体有关系的实体:

人 --> 位置

它使用 HTML 帮助器 HTML.DropDownListFor() 来显示所有位置的列表。用户可以从列表中选择一个位置,然后按保存。

默认模型绑定器正确设置正在保存的 Person 实体上的 Location 值。此位置是一个休眠映射实体,并且已实例化并具有在下拉列表中选择的 id 值。显然,由于保存位置的下拉列表仅具有位置的 id,因此该位置的其余值为空。还行吧。我只是想通过对现有位置的引用来保存 Person 。

所以,复杂性来了。我们需要改变两个实体之间的关系。现在 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

一个建议:

将列表项的名称更改为“位置”,然后在 Action 方法中包含一个参数string[] locations

如果 MVC 可以正确匹配名称,您应该会收到一组选定项。然后,您可以使用适当的插入和删除手动处理更新数据库。

于 2010-09-13T20:06:17.367 回答