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

时间:2010-02-11 16:58:14

标签: c# asp.net-mvc uiview ilist

在过去的几周里,我多次尝试使用服务器端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视图中,您如何编辑“编辑”字段,以便将单个模型发布回控制器?

我很熟悉
<input id="products[0].subProducts[0].images[0].name" /... >

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

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

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

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

1 个答案:

答案 0 :(得分: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"

绑定回原始列表视图模型