如何添加,编辑和删除集合中的项目?

时间:2011-04-28 19:38:12

标签: c# asp.net-mvc-3 razor

我见过这个问题

How do I edit an IEnumerable<T> with ASP.NET MVC 3?

这显示了绑定到集合的一个很好的示例,但是如何添加和删除项目呢?我希望有一个解决方案不会在服务器上添加或删除项目,只有一个帖子到服务器以批量保存所有操作。

3 个答案:

答案 0 :(得分:2)

这些可能是一种痛苦的场景,具体取决于实现的复杂性(即,如果您希望在网格中进行内联编辑等)。

Steve Sanderson对此有一些真正的good posts,他还写了一个名为Knockout的js库,就像那种岩石。我建议checking it out

答案 1 :(得分:1)

添加

一种选择是使用javascript克隆对象的最后一个编辑表示并将其附加到该列表,以便另一个项目的另一个编辑框。除了克隆html之外,它还需要清除任何内容,重置验证并增加输入ID中的集合索引号。它不是很干净但它有效并且没有碰到服务器。

删除

这更复杂,因为模型绑定器会坚持收集索引不会中断。所以你不能只删除一个然后发布表格,因为集合索引中会有一个洞(即删除索引3处的项目时为1,2,4)。处理此问题的一种方法是使用隐藏的ID字段。在回发后,验证针对数据存储中的内容发布的内容并删除不存在的内容。删除将从列表中删除该项目,并在其之外的任何项目中减少输入ID中的集合索引号。再次,凌乱。一个可能更干净的选择是隐藏已删除的项目,并有一个隐藏的输入字段,表示请求删除。这样就不用担心收集指数区间有休息。

希望有更好的方法来做到这一点。我用javascript编写了一个抽象的方法,它依赖于HTML类命名,但它确实感觉有些不洁。

答案 2 :(得分:0)

这个问题没有意义......请描述一下你的实际情况。

IEnumerable是服务器端的东西。没有命中服务器就无法编辑它。

但即使我们解雇你的“没有点击服务器”的警告,也无法编辑IEnumerable。该类型是针对某些其他数据源的只读抽象。从可能获得IEnumerble的地方有一些添加/编辑/删除机制。告诉我们IEnumerable来自哪里,我们可能会指出你的机制。