我正在尝试为我们的客户可以编辑某些字段的工作编写应用程序。当他们单击编辑时,代码将锁定要编辑的数据。当他们点击保存时,数据将解锁。但是当他们点击其他地方、转到另一个页面或站点,甚至关闭浏览器时,我无法决定是否可以解锁数据。
确定用户是否离开编辑页面的好方法是什么?
(我们使用 C# .NET 3.5 和 JQuery 以及 SQL Server 2005 DB)。
我正在尝试为我们的客户可以编辑某些字段的工作编写应用程序。当他们单击编辑时,代码将锁定要编辑的数据。当他们点击保存时,数据将解锁。但是当他们点击其他地方、转到另一个页面或站点,甚至关闭浏览器时,我无法决定是否可以解锁数据。
确定用户是否离开编辑页面的好方法是什么?
(我们使用 C# .NET 3.5 和 JQuery 以及 SQL Server 2005 DB)。
如果您确实必须使用悲观锁定,您可以在 Session_End 中添加检查并解锁该用户在当前会话中设置的所有锁。如果用户关闭浏览器窗口或进入另一个站点,请使用 onUserExit jQuery 插件结束会话,示例如下:
您可以利用 html 标签的“onunload”事件。引发此事件 - 当使用 X 按钮关闭页面时 - 当页面被重定向时(在您的情况下,用户单击编辑并移动到不同的链接而不保存。)
希望这可以帮助!!
您的问题被理解为“确定用户是否在未单击“保存”解锁字段的情况下放弃编辑页面的好方法是什么?
但是当他们点击其他地方、转到另一个页面或站点,甚至关闭浏览器时,我无法决定是否可以解锁数据。
有人从同一个应用程序查看另一个页面的所有场景可能意味着同一会话中的另一个窗口 - 可能是为了检查某些内容。您不希望触发解锁,因为您的用户仍然可以打开一个窗口,他们可以在其中提交编辑。
用户离开页面的其他场景可以使用onUserExit。
但是,您从该列表中省略了“用户去吃午饭而网页打开”的场景。这就是悲观锁定存在问题的原因。
因此,将问题改写为“用户点击了编辑,但未能在合理时限内进行修改和保存”。
基本上,你的锁应该在某个时候过期。
单击“编辑”后,保存锁定启动并启动计时器(5 分钟?),这在屏幕上也可见。(如果使这些同步是一个问题,请使客户端计时器比服务器端计时器更短)。您的用户必须在这段时间内进行更改并单击保存。您也许可以添加一个延长按钮来延长时间。
原则是你需要确定有人离开它太久,而不是有人离开它。您还向用户表明,单击“编辑”后,您希望他们很快会进行编辑。
您需要对系统进行编码以解锁锁定已过期的字段。
这样做的好处是,对于请求此类编辑锁的人来说,您的倒计时看起来会很“酷”。