如果有人离开页面我怎么能调用数据库存储过程? 例如,我有某种购物车,当人们将商品添加到购物车时,必须先将其锁定直至保存,但如果您翻页,则在数据库中保留商品,如何避免呢?如果没有保存人关闭页面,如何保留未保留的项目? 谢谢
答案 0 :(得分:2)
你可以在你的global.asax中放置一个处理程序在Session_End上,并在那里检查释放保留的内容。
答案 1 :(得分:2)
免责声明:以下建议解决问题,而不是问题。
我知道可靠处理这样的事情的唯一方法 - 确保释放长交叉事务“锁定”(或“票证”) - 是使用服务来“定期发布“(或”清除“)项目。
也就是说,不是回应“退出”事件,而是在说出(初始)1小时预约之后,从购物车中移除(解锁)尚未购买的物品。
考虑在影响购物车的用户操作之后向用户提供5分钟的延期(次要)预订时间,并且在购买完成之前通知用户某些商品仅“保留”。 (例如,看看航空公司机票购买网站。)
这可以与结合使用其他方法之一来检测“页面卸载”或“注销”,具体取决于业务规则。
快乐的编码。
答案 2 :(得分:1)
<强> onbeforeUnload 强>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script language="javascript" type="text/javascript">
window.onbeforeunload = function (evt) {
debugger;
if (confirm('Are you sure to exit')) {
document.getElementById('<%=btn.ClientID %>').click();
}
else
return false;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="btn" runat="server" Text="Click for SP" OnClick="btn_Click" />
</div>
</form>
</body>
</html>
protected void btn_Click(object sender, EventArgs e)
{
//SP Call
}
为什么要去数据库进行中间操作?为什么不在用户按下保存按钮之前保存购物车?这可能会导致应用程序出现性能问题。你能负担得起每个项目的数据库点击订单吗?
答案 3 :(得分:0)
为什么不尝试长时间轮询,你可以使用特定于用户的令牌建立连接,一旦连接断开并且在短时间内没有再次提升,你可以将用户归类为离开网站。