2

在过去的几周里,我多次尝试让服务器端 MVC 2 视图处理具有嵌套 IList 元素的对象,但没有取得多大成功。我缺少一些基本的理解,我希望这个问题能得到解决。

我想要的是一个显示产品列表的表单,您可以在其中在线更改信息,包括层次结构(一个产品列表,每个产品都有一个子产品列表,每个产品都有一个图像列表等)我正在尝试重新创建一个旧的 MS Access 表单,其中大表单有一个产品列表,子表单显示相关产品,所有这些都允许在线编辑。Access 会在关注不同的记录时保存每条记录。

假设您有一个如下所示的领域模型:

public class Product {
    ... // Lots of fields like public string name {get; set;}
    public IList<Department> departments {get; set;}
    public IList<SubProduct> subProducts {get; set;}
}
public class SubProduct {
    ... // Lots of fields like public string name {get; set;}
    public IList<Image> images {get; set;}
}
public class Image {
    ... // Lots of fields like public string name {get; set;}
}

还有一个看起来像这样的视图模型:

public class EditProduct {
    IList<Product> products {get; set;}
}

在 MVC 2 视图中,您将如何对 Edit 字段进行编码,以便将单个模型发布回控制器?我熟悉

<input id="products[0].subProducts[0].images[0].name" /... >

机制,但每个 IList 都需要一种在同一屏幕上 CRUD 元素的方法。这是一个大数据输入屏幕,速度与能够查看列表中的所有产品一样重要。我需要添加按钮、删除按钮以及在编辑任何输入后发布整个表单的方法。

如果我从 JQuery 的角度来看:

  • 我将模型序列化为 JSON,用于前 N 个 IList 元素的初始形式
  • 当它们到达容器 div 的底部时,我会在同一列表中动态加载其他产品
  • 我在保存/发布时接受整个模型或接受单个实体的相同表单的片段,例如每个 IList 元素都有一个单独的 html 表单标签

但出于某种原因,我只是不知道如何在服务器端执行此操作。视图本身的任何链接或示例代码都会很棒。没有 IList 的元素似乎工作得很好,尤其是使用 UI 模板。我会在每个可编辑实体周围创建一堆单独的 html 表单标签,并让帖子一次只处理一个元素吗?

4

1 回答 1

0
<% for (int count = 0; count < Model.Students.Count; count++ )
   {                                              %><%= 
      Html.EditorFor(m => m.Students[count])      %><%
   } 
%>

创建表单名称,如:

name="Students[0].Name"
name="Students[1].Name"
name="Students[2].Name"

绑定回原始列表视图模型

于 2010-02-23T05:29:54.173 回答