【问题标题】:ASP.NET MVC3: Add element from list into a model's collection, from "Edit" viewASP.NET MVC3:从“编辑”视图将列表中的元素添加到模型的集合中
【发布时间】:2012-03-23 21:40:11
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

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


    【解决方案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){ ... }
    

    参数 devices 包含用户提交表单时选择的设备 ID 列表(假设复选框位于表单内并且用户提交)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      相关资源
      最近更新 更多