在过去的几周里,我多次尝试让服务器端的MVC 2视图与具有嵌套的IList元素的对象一起工作,但没有太大的成功。我缺少一些基本的理解,我希望这个问题能够解决。
我想要的是一个显示产品列表的表单,您可以在线更改信息,包括层次结构(每个产品都有子产品列表,每个产品都有图像列表等)我正在尝试重新创建一个旧的MS访问表单,其中大表单有产品列表,子表单显示相关产品,所有正在进行联机编辑。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视图中,如何对编辑字段进行编码,以便将单个模型发布回控制器?我熟悉
<input id="products[0].subProducts[0].images[0].name" /... >
但每个IList都需要一种方法来在同一屏幕上添加元素。这是一个大数据输入屏幕,速度和在列表中看到所有产品一样重要。我需要添加按钮、删除按钮,以及编辑任何输入后发布整个表单的方法。
如果我从jquery的角度来看它:
-
对于第一个n个ilist元素的初始表单,我将模型序列化为json。
-
当其他产品到达容器分区的底部时,我会在同一列表中即时加载它们。
-
我在保存/发布时接受整个模型,或者为单个实体接受相同表单的片段,比如为每个ilist元素都有一个单独的html表单标记。
但出于某种原因,我无法在服务器端实现这一点。视图本身的任何链接或示例代码都是很好的。没有ilist的元素似乎工作得很好,特别是对于ui模板。我会在每个可编辑实体周围创建一组单独的HTML表单标记,并且一次只让文章处理一个元素吗?