如果其他用户正在编辑,则锁定页面/实体编辑

时间:2016-03-20 04:10:42

标签: asp.net webforms ado.net

我有一个asp.net页面来编辑实体。当另一个用户已经在该实体的编辑页面上时,通知和阻止保存的最佳设计模式是什么。当用户离开页面时,我希望锁定到期。我还想显示锁定页面的用户名。

会话状态可以是inproc或state server。

用户在尝试保存之前需要知道(例如,禁用编辑页面上所有其他用户的保存按钮)

1 个答案:

答案 0 :(得分:3)

有很多不同的方法可以做到这一点,但总的来说它相当复杂。要注意的一个挑战是,您不知道用户何时离开页面,因为无法发出信号。

我曾经看过几次使用过的方法是执行以下操作:

  • 添加一列以确定锁定记录的人员(例如,将$('#link').keypress(function (e) { if (e.keyCode == 111){ e.preventDefault(); } }); 等添加到您的表格中)
  • 添加一列以确定记录锁定的日期/时间。 (例如Locked_User_ID
  • 定义一个全局常量(配置设置等),指定锁定的有效时间。
  • 在页面/控制器加载时,检查有问题的记录是否已锁定,如果是,则锁定最近(基于您的全局常量)以确定其他用户仍在使用它。如果是,则不允许编辑和显示正在编辑的用户及其上一次活动(基于Locked_Timestamp& Locked_Timestamp)。
  • 如果最近没有锁定,或者根本没有锁定,或者被您锁定,请将Locked_User_ID更新为当前用户,将Locked_User_ID更新为当前日期。
  • 一旦用户点击后退/取消,保存等,解锁记录。 (这样它就不必根据全局常量等待超时 - 但是如果他们只是关闭浏览器等,则超时将是故障保护)。

另一个微小的变化是"退房"或"编辑"实现此功能的按钮/功能 - 这样用户可以在不自动获取锁定信息的情况下查看信息,并且只有在他们点击"签出"或"编辑"它会检查并获取锁定。

希望这有帮助!

此致

罗斯