ASP.NET MVC 2:编辑嵌套实体的C#视图是什么样子的?

ASP.NET MVC 2:编辑嵌套实体的C#视图是什么样子的?,c#,asp.net-mvc,uiview,ilist,C#,Asp.net Mvc,Uiview,Ilist,在过去的几周里,我多次尝试让服务器端MVC2视图使用具有嵌套IList元素的对象,但都没有成功。我缺少一些基本的理解,我希望这个问题能够解决 我想要的是一个显示产品列表的表单,您可以在线更改信息,包括层次结构(一个产品列表,每个产品都有一个子产品列表,每个产品都有一个图像列表,等等)。我正在尝试重新创建一个旧的MS Access表单,其中大表单有一个产品列表,子表单显示相关产品,所有这些都允许在线编辑。Access会在关注不同的记录时保存每个记录 假设您有一个如下所示的域模型: public c

在过去的几周里,我多次尝试让服务器端MVC2视图使用具有嵌套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;}
}
公共类产品{
…//许多字段,如公共字符串名称{get;set;}
公共IList部门{get;set;}
公共IList子管道{get;set;}
}
公共级子管道{
…//许多字段,如公共字符串名称{get;set;}
公共IList映像{get;set;}
}
公众阶级形象{
…//许多字段,如公共字符串名称{get;set;}
}
视图模型如下所示:

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;}
}
公共类编辑产品{
IList乘积{get;set;}
}
在MVC2视图中,如何对编辑字段进行编码,以便将单个模型发布回控制器?我对这本书很熟悉

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

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

如果我从JQuery的角度来看它:

  • 对于前N个IList元素的初始形式,我将模型序列化为JSON
  • 当它们到达容器div的底部时,我会在同一列表中动态加载其他产品
  • 我在保存/发布时接受整个模型,或者为单个实体接受相同表单的片段,比如为每个IList元素提供单独的html表单标记
但出于某种原因,我不知道如何在服务器端做到这一点。视图本身的任何链接或示例代码都非常好。没有IList的元素似乎工作得很好,特别是对于UI模板。我会在每个可编辑实体周围创建一堆单独的html表单标记,并且让帖子一次只处理一个元素吗

<% for (int count = 0; count < Model.Students.Count; count++ )
   {                                              %><%= 
      Html.EditorFor(m => m.Students[count])      %><%
   } 
%>
将其绑定回原始列表视图模型


哪个绑定回到原始列表视图模型

您希望只有一个提交按钮来提交所有更改,还是每行一个?我确实希望有一个单独的保存按钮,但我们需要为每个IList集合添加,并为每个IList元素删除,这可能意味着我们有大量的提交按钮。所有这些按钮都会引起恶心的感觉。LOLScott Guthrie提到了新的数组或集合EditorFor和DisplayFor处理程序。答案可能包括如何将它们与列表一起使用。您希望只有一个提交按钮来提交所有更改,还是每行一个?我确实希望有一个保存按钮,但我们需要为每个IList集添加,并为每个IList元素删除,这可能意味着我们有大量提交按钮。所有这些按钮都会引起恶心的感觉。LOLScott Guthrie提到了新的数组或集合EditorFor和DisplayFor处理程序。答案可能包括如何在列表中使用它们。