【发布时间】:2011-04-28 19:38:12
【问题描述】:
我看过这个问题
How do I edit an IEnumerable<T> with ASP.NET MVC 3?
这显示了一个很好的绑定到集合的示例,但是您如何添加和删除项目?我希望有一个解决方案,不会打到服务器添加或删除一个项目,只需一个帖子到服务器以批量保存所有操作。
【问题讨论】:
标签: c# asp.net-mvc-3 razor
我看过这个问题
How do I edit an IEnumerable<T> with ASP.NET MVC 3?
这显示了一个很好的绑定到集合的示例,但是您如何添加和删除项目?我希望有一个解决方案,不会打到服务器添加或删除一个项目,只需一个帖子到服务器以批量保存所有操作。
【问题讨论】:
标签: c# asp.net-mvc-3 razor
这些可能是一种痛苦的场景,具体取决于实现的复杂性(即,如果您想在网格中进行内联编辑等)。
Steve Sanderson 在这方面确实有一些good posts,而且他还编写了一个名为Knockout 的 js 库。我会推荐checking it out。
【讨论】:
JsonResult,它将从格式化为 JSON 的控制器操作返回模型。这可能会有所帮助。
一种选择是使用 javascript 克隆对象的最后一个编辑表示并将其附加到该列表中,以便为另一个项目提供另一个编辑框。除了克隆 html,它还需要清除所有内容、重置验证并增加输入 ID 中的集合索引号。它不是很干净,但是它可以工作并且不会访问服务器。
这更复杂,因为模型绑定器会坚持集合索引是完整的。因此,您不能只删除一个然后将表单发回,因为集合索引中会有一个洞(即删除索引 3 处的项目时为 1、2、4)。处理此问题的一种方法是使用隐藏的 ID 字段。在回发时,根据数据存储中的内容验证发布的内容并删除不存在的内容。删除将从列表中删除该项目,并减少其以外任何项目的输入 ID 中的集合索引号。又是乱七八糟。一个可能更简洁的选项是隐藏已删除的项目,并有一个隐藏的输入字段,表示请求删除。这样就不用担心集合索引范围有中断。
希望有更好的方法来做到这一点。我已经使用依赖于 HTML 类命名的 javascript 编写了一种抽象的方法,但它确实感觉有些不干净。
【讨论】:
这个问题没有意义...请描述您的实际情况。
IEnumerable 是服务器端的东西。如果不访问服务器,就无法对其进行编辑。
但是,即使我们忽略了您的“未命中服务器”警告,也无法编辑 IEnumerable。该类型是围绕其他一些数据源的只读抽象。从可能获得IEnumerble的任何地方都有一些添加/编辑/删除机制。告诉我们您的 IEnumerable 来自哪里,我们可能会为您指明该机制。
【讨论】: