【问题标题】:How do you add, edit and delete items in a collection?如何添加、编辑和删除集合中的项目?
【发布时间】:2011-04-28 19:38:12
【问题描述】:

我看过这个问题

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

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

【问题讨论】:

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


    【解决方案1】:

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

    Steve Sanderson 在这方面确实有一些good posts,而且他还编写了一个名为Knockout 的 js 库。我会推荐checking it out

    【讨论】:

    • 这些看起来很整洁。是否可以根据服务器端视图生成 javascript 视图模型?
    • 是的,这很酷。关于在 javascript 中创建对象,有一个用于 ASP.NET MVC 的 JsonResult,它将从格式化为 JSON 的控制器操作返回模型。这可能会有所帮助。
    【解决方案2】:

    添加

    一种选择是使用 javascript 克隆对象的最后一个编辑表示并将其附加到该列表中,以便为另一个项目提供另一个编辑框。除了克隆 html,它还需要清除所有内容、重置验证并增加输入 ID 中的集合索引号。它不是很干净,但是它可以工作并且不会访问服务器。

    删除

    这更复杂,因为模型绑定器会坚持集合索引是完整的。因此,您不能只删除一个然后将表单发回,因为集合索引中会有一个洞(即删除索引 3 处的项目时为 1、2、4)。处理此问题的一种方法是使用隐藏的 ID 字段。在回发时,根据数据存储中的内容验证发布的内容并删除不存在的内容。删除将从列表中删除该项目,并减少其以外任何项目的输入 ID 中的集合索引号。又是乱七八糟。一个可能更简洁的选项是隐藏已删除的项目,并有一个隐藏的输入字段,表示请求删除。这样就不用担心集合索引范围有中断。

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

    【讨论】:

      【解决方案3】:

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

      IEnumerable 是服务器端的东西。如果不访问服务器,就无法对其进行编辑。

      但是,即使我们忽略了您的“未命中服务器”警告,也无法编辑 IEnumerable。该类型是围绕其他一些数据源的只读抽象。从可能获得IEnumerble的任何地方都有一些添加/编辑/删除机制。告诉我们您的 IEnumerable 来自哪里,我们可能会为您指明该机制。

      【讨论】:

      • 我澄清了这个问题。我不希望对列表的每次添加和删除都进行回发。
      猜你喜欢
      • 1970-01-01
      • 2012-09-05
      • 2012-03-16
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 2022-10-06
      相关资源
      最近更新 更多