ASP.NET MVC3:从“编辑”视图中将列表中的元素添加到模型的集合中

时间:2012-03-23 21:40:12

标签: asp.net ajax asp.net-mvc-3 partial-views

我有一个用户模型,其中包含一系列设备。用户可以拥有任意数量的设备,但每个设备可能只有一个用户。

我正在制作一个用于编辑用户的页面。当需要编辑用户的设备集合时,该视图将显示与用户关联的设备表,每个设备旁边都有删除链接,以及当前未与用户关联的设备表,其中包含添加链接。该视图被输入到包含两个列表的viewmodel。

这都在局部视图中,因此(理想情况下)它可以使用Ajax动态更新。

不幸的是,我对ASP.NET和MVC3以及一般的Web开发都很陌生。我该如何编写视图来实现它?

我对如何实现这一点的大多数假设都基于this教程。他正在做类似的事情,但他只是使用@ Html.EditorFor并将文本字段中的用户类型添加到集合中,而不是选择现有对象。据推测,我需要将所选设备的ID发送回控制器,因此它可以在列表之间移动设备并返回更新的部分视图。但是视图被输入到viewmodel,并且(除非我弄错了)我不能在一个帖子中将任意数据发送回控制器;我只能发送viewmodel。所以看起来我需要在发回它之前将所选设备的ID放入viewmodel中,但如果我这样做,那么我通过操纵视图中的数据来违反整个MVC模式。

这是一个非常基本的问题所以我确信有很多解决方案,但不幸的是我缺乏足够的领域知识甚至不知道如何寻找。

1 个答案:

答案 0 :(得分: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列表(假设复选框位于表单内并且用户提交表单)。

这是一种方法,当然还有其他方法。