在过去的几周里,我多次尝试使用服务器端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的角度来看它:
但由于某种原因,我不知道如何在服务器端执行此操作。 View本身的任何链接或示例代码都会很棒。没有IList的元素似乎工作得很好,尤其是UI模板。我是否会在每个可编辑实体周围创建一堆单独的html表单标签,并且帖子一次只处理一个元素?
答案 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"
绑定回原始列表视图模型