【问题标题】:Parent & child records on same page best practices?同一页面上的父子记录最佳实践?
【发布时间】:2015-01-23 23:54:54
【问题描述】:

我创建了一个简单的“订单”表单,它在同一页面上包含“订单项目” - 使用 mvc / web api / odata 构建..

只是想知道其他人如何处理同一页面上的父子记录?

这就是它目前的工作方式,我想知道是否还有其他人有更好的想法?

  1. 当用户单击“添加新订单”按钮时,会添加一个带有“Active = 0”(临时记录)的新“订单”,我会显示新插入订单的编辑表单。
  2. 然后用户可以填写“订单”表单并将“订单商品”添加到订单中。
  3. 第一次保存“订单”后,我会通过设置“活动 = 1”来激活订单。

通过这种方式,我可以想到 2 个问题:

  1. 临时订单(未完成的订单)需要时常删除。
  2. 如果用户编辑现有订单并从订单中添加、编辑或删除“订单项目”,即使用户单击“取消”按钮且实际订单未保存,这也会立即修改订单。这里的问题是用户可能认为单击取消不会保存任何更改(包括他们已经进行的“订单项”更改 - 我希望这是有道理的!)。

这是我的意思的演示(注意:添加“订购商品”位尚未完成 - 但应该足以大致了解我在说什么): http://orders.mydevelopmentserver.com/myorders

【问题讨论】:

  • 您的 UI 设计是否可以灵活地为 OrderItem 添加取消标志?这种方式更改为订单(添加/编辑订单项目)立即保存在数据库中。如果需要从订单中删除订单项目,用户可以编辑订单并从订单中删除订单项目。

标签: jquery asp.net-mvc asp.net-web-api odata


【解决方案1】:
  1. 您只能在视图中创建和修改现有订单(在客户端)。只需准备模型以保存。如果一切正常并且用户单击保存,您将发送到您的 api 填充模型,并在服务器端更新现有条目或创建新条目。如果用户单击取消,只需清理您的视图模型,不要向服务器发送任何内容。

  2. 您可以在 DB 中使用临时条目。您的父实体应该有一个标志或状态,表明它是临时的并防止在列表中显示它,以及用于存储原始实体 id 的额外字段,如果是新的,则为 null。在创建新实体或编辑现有实体时,您应该创建具有此时间状态的新实体(或在编辑现有实体时克隆)。做你的改变。如果用户单击保存,对于新实体,只需将状态更改为非临时,对于现有的克隆,使用原始实体 ID 将其返回。并删除它之后的时间。如果用户单击取消,则只需删除时间实体。如果用户在编辑模式下关闭浏览器,您可以处理 onclose 事件以删除它的时间实体,或在下次尝试编辑时将其删除。

【讨论】:

    猜你喜欢
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    相关资源
    最近更新 更多