c# - 在 ASP.NET MVC 中,如何避免或提醒人们编辑相同的表单或尝试编辑过时的数据?

标签 c# jquery asp.net-mvc

我有一个 ASP.NET MVC 站点,并且有一个网页,您可以在其中查看订单列表。

您可以双击一行,这将打开一个详细信息页面(授权用户将看到一个包含大量文本框、文本区域、单选按钮等的大表单)。

最初只有一个有权编辑订单的人,所以没有问题,但现在用户正在组建团队,并且在某些情况下有几个人(10+)有权编辑同一订单,所以他们可能有详细网页同时上线。

现在存在两个问题。

  1. 人们现在提示他们所做的更改立即被覆盖,因为其他人同时编辑相同的订单,这造成了很多困惑。

  2. 如果人们整天离开详细信息页面,他们可能会看到非常旧的 View 版本(因为其他多个人可能全天都保存了更改)。没有任何信息通知他们他们的页面版本已过期,然后应该在编辑之前刷新页面。

我正在寻找有关处理上述两个问题的最佳方法的建议。

此外,是否存在可以利用的某些库或模式(而不是从头开始构建某些东西)。

最佳答案

关于并发,您有两种选择:

  1. 悲观并发(锁定)。

    您需要实现一个锁定系统,在只读或更新/删除上发出锁定

  2. 乐观并发

    LastUpdated 时间戳列添加到表中,并在更新/删除时在 WHERE 中使用它(与 ID 一起)。如果 0 行受到影响,则您正在尝试更新/删除过时的数据。

阅读this关于如何在 ASP.NET MVC 中使用 Entity Framework 处理此问题.

您还可以实现一个系统来通知同一页面上的用户。一种方法是使用SignalR并创建一个 group每页。您可以实时广播值的变化,甚至加载新值。

关于c# - 在 ASP.NET MVC 中,如何避免或提醒人们编辑相同的表单或尝试编辑过时的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37766786/

相关文章:

javascript - 菜单性能问题

javascript - jquery获取元素值然后设置到图表js中

html - MVC 5 razor View 以实际大小显示图像,没有失真或拉伸(stretch)

c# - ContentControl.Template 和 ContentControl.ContentTemplate 有什么区别

c# - 我应该将每个类放在单独的文件中吗?

javascript - 将文件名与 XMLHttpRequest 关联

c# - 未设置 ASP.NET Core 2.0 身份验证 Cookie

c# - 一种在关闭上一个窗口的同时打开新窗口的方法

javascript - 在 ajax 成功调用页面重新加载后附加 DOM 元素

javascript - 使用 MVC 和 Javascript 验证动态添加的字段并将其保存到数据库