代码之家  ›  专栏  ›  技术社区  ›  Zachary Scott

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

  •  2
  • Zachary Scott  · 技术社区  · 15 年前

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

    1 回复  |  直到 15 年前
        1
  •  0
  •   Zachary Scott    15 年前
    <% 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"