在过去的几周里,我多次尝试让服务器端 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 表单标签,并让帖子一次只处理一个元素吗?