确定用户“;叶子”;ASP.NET中的页面/站点

本文关键字:站点 NET ASP 用户 叶子 | 更新日期: 2023-09-27 18:29:50

如果有人要离开页面,我如何调用数据库存储过程?例如,我有一种购物车,当人们向购物车添加项目时,它必须被锁定,直到保存,但如果您打开第页,项目在数据库中保留,如何避免?如果用户关闭页面而不保存,如何使项目无保留?感谢

确定用户“;叶子”;ASP.NET中的页面/站点

免责声明:以下建议了问题的解决方案,而不是问题。


据我所知,要可靠地处理这样的事情——确保长时间的交叉交易"锁"(或"票证")被释放——唯一的方法就是使用服务定期"释放"(或"清除")项目。

也就是说,不响应"注销"事件,只需在(初始)1小时预订后,从购物车中移除(解锁)尚未购买的物品。

考虑在影响购物车的用户操作后给用户5分钟的延期(二次)预订时间,并通知用户某些商品在购买完成之前只"预订"。(例如,看看航空公司的机票购买网站。)

这可以与结合使用,根据业务规则检测"页面卸载"或"注销"。

快乐的编码。

您可以在global.asax中的Session_End上放置一个处理程序,并在那里进行检查,释放保留的内容。

onbeUnload

示例HTML

<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
}

为什么要到数据库进行中间操作?为什么不在用户按下保存按钮之前将购物车保存在会话中?这可能会导致应用程序出现性能问题。你能负担得起点击订购每件商品的数据库吗?

为什么不尝试长轮询,您可以使用特定于用户的令牌引发连接,一旦连接被删除,并且在短时间内没有再次引发,您就可以将用户归类为离开站点。