2012-05-07 46 views
0

我想为我们的客户可以编辑某些字段的工作编写应用程序。当他们点击编辑时,代码将锁定要编辑的数据。当他们点击保存时,数据将解锁。但是,我无法决定在他人点击其他地方时是否可以解锁数据,转到其他页面或网站,甚至关闭浏览器。确定是否有人离开网页的好方法

什么是确定用户是否已离开编辑页面的好方法? (我们使用C#.NET 3.5和JQuery以及SQL Server 2005数据库)。

+0

这个'锁'在哪里发生?在服务器上? – n8wrl

+0

在C#代码中,我有一个引用数据库中的锁表的锁类 – cdub

+3

恕我直言,你的设计非常糟糕 - 你永远不要在交互式情况下做这种悲观的锁定。与Web应用程序...实施一个乐观的战略,而不是! – Yahia

回答

2

如果您确实必须使用悲观锁定,您可以添加检入Session_End并解锁此用户在当前会话中设置的所有锁定。使用onUserExit jQuery插件,如果用户关闭浏览器窗口或转到其他网站上结束会话,这里是例子:

https://stackoverflow.com/a/10481972/351383

+0

您是否在用户界面上放置了JavaScript?你能在这个页面上做到这一点吗http://www.userfirst.com/creations/onuserexit/ –

0

你的问题被理解为“什么是决定用户是否有一个好办法放弃编辑页面而没有点击“保存”来解锁该字段?

但是我无法确定当他们点击其他地方,转到其他页面或站点,甚至关闭浏览器时是否可以解锁数据。

从某个应用程序查看另一个页面的所有场景可能意味着同一个会话中的另一个窗口 - 可能需要检查某些内容。您不希望触发解锁,因为您的用户仍然可以打开一个可以提交编辑的窗口。

用户离开页面的其他场景可以使用onUserExit。

但是,您从此列表中省略了“用户去午餐离开网页打开”的情景。这就是为什么悲观锁定有问题。

因此,将该问题改为“用户点击了编辑,但未能在合理的时间限制内进行修改并保存”。

基本上,你的锁应该在某个时间点过期。

点击'编辑'后,保存锁定启动并启动一个定时器(5分钟?),该定时器也在屏幕上可见。 (如果让这些同步是一个问题,使客户端计时器比服务器端计时器短)。您的用户必须进行更改并在此时间内点击保存。你可以添加一个Extend按钮来延长时间。

原理是,你需要确定有人已经离开它太久,而不是有人离开它。您还向用户展示点击了“编辑”,您希望他们尽快进行编辑。

您需要对系统进行编码才能解锁锁定已过期的字段。

这样做的好处是您的倒计时对于那些需要这种编辑锁定的人来说看起来很酷。

2

您可以利用html标签的“onunload”事件。此事件被提出 - 当页面被关闭时使用X按钮 - 当页面被重定向时(在您的情况下,用户点击编辑并移动到另一个链接而不保存。)

希望这有助于!

相关问题