我想检测并关闭浏览器窗口。但在关闭浏览器页面之前,我需要更新InUse表中的SQL条目。有一些独特的情况添加到此。当EditPage.aspx打开(MstrTbl中的recordID记录)时,我在InUse表中放置一个条目。我正在跟踪recno(自动生成),userid,sessionid,recordID(MstrTbl),状态,rectype,rwindicator,createdatetime,updatedatetime。我在更新InUse表时使用Session(" gUserID")[所有Session("变量")]。变量非常简单。但是,可以有多个用户打开相同的recordID,但是,只有第一个用户可以编辑。 (因此,rwindicator,读/写指示器)。在以前的日子里,你可以只控制一次vb6 app开放,但现在在网络世界中,用户可以打开多个浏览器(和记录),在这种情况下需要能够这样做。
好的,如果此用户有一个InUse条目,并且此recordID,则将第二次尝试重定向到错误页面(您只能打开此记录一次)错误,并返回到默认页面。
现在用户已完成记录,可以单击主页(Site.Master菜单项)或只需单击" X"在浏览器中。我不想要"验证关闭"消息(额外点击),但是当InUse表具有[A]状态时,现在需要更新时间戳和e [X]成对状态。解决方案可以是java或jquery。我尝试了多次尝试的几次演绎"捕捉"窗户关闭。使用隐藏的" btnCloseWindow"在onbeforeunload中,函数似乎几乎在较大的时间内工作,特别是如果我设置了一个" alert" msg(我不想这样做)。
Window.close中的代码似乎永远无法更新InUse记录。我也试过超时间隔。我尝试了十几种不同的解决方案" (来自其他程序员的尝试)但似乎没有可靠的,如果我让2或3个用户打开3或4个相同的记录,然后一次关闭它们。我可以创建InUse记录。这很容易。但是当用户关闭recordID时,它不会将日期/时间戳和状态从[A] ctive更新为e [X] pire。我不想插入和删除记录。这是审计线索。但是如果相同的userID打开相同的recordID并且它仍然显示[A] ctive,则它将不允许用户(错误地)再次打开它。
EditPage.aspx.vb中的代码在代码后面运行公共共享子(RecData.LockRec),但是当" X"时,需要运行(RecData.CloseRec)。或" Home"单击菜单项。
提前,任何帮助表示赞赏。
答案 0 :(得分:0)
您可以使用window.onclose活动,但请注意您的时间非常短,因此您的后端必须快速接受发布的活动。浏览器只会等待很短的时间。因此,如果您正在做任何复杂的事情,请从客户端接受POST / GET,然后关闭连接,然后然后处理POST / GET。