Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确定用户何时;“叶子”;ASP.NET中的页面/站点?_C#_Asp.net_.net 2.0 - Fatal编程技术网

C# 确定用户何时;“叶子”;ASP.NET中的页面/站点?

C# 确定用户何时;“叶子”;ASP.NET中的页面/站点?,c#,asp.net,.net-2.0,C#,Asp.net,.net 2.0,如果有人离开页面,我如何调用数据库存储过程? 例如,我有一种购物车,当人们向购物车添加物品时,它必须被锁定,直到保存,但若你们翻开页面,物品被保留在数据库中,如何避免它?如果用户关闭页面而不保存,如何使项目不被保留? 谢谢你你可以在global.asax中的Session_End上放置一个处理程序,并在那里进行检查,释放保留的内容。免责声明:以下建议解决问题,而不是问题 据我所知,可靠地处理此类事务的唯一方法——确保长跨事务“锁”(或“票据”)被释放——是使用服务定期“释放”(或“清除”)项

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

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

免责声明:以下建议解决问题,而不是问题


据我所知,可靠地处理此类事务的唯一方法——确保长跨事务“锁”(或“票据”)被释放——是使用服务定期“释放”(或“清除”)项

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

考虑在影响购物车的用户操作之后,为用户提供5分钟的延长(次要)预订时间,并通知用户在购买完成之前,某些项目仅为“预订”。(比如,看看机票购买网站。)

这可以与其他方法结合使用,根据业务规则检测“页面卸载”或“注销”

快乐编码。

示例HTML

为什么要到数据库进行中间操作?为什么不在用户按下保存按钮之前在会话中保存购物车?这可能会导致应用程序出现性能问题。您是否有能力访问每个项目的数据库?单击以获取订单?

为什么不尝试长时间轮询,您可以使用特定于用户的令牌建立连接,一旦连接断开并且在短时间内不再建立连接,您可以将用户分类为离开网站。

当有人离开页面并使其正常工作时,调用代码是非常困难的。可能会重复,因此用户会将项目添加到购物车中,如果他们离开页面而不保存,您想从购物车中删除项目吗?难道你不能等到用户单击“保存”按钮后再添加项目吗?可能重复的问题是,这是公司的“内部”程序,当一个用户销售项目时,另一个用户不能销售相同的项目请注意,此事件不会在所有部署场景中发生。。。我不记得确切的细节,但这取决于你的应用程序域在IIS中的托管方式。请记住,在某些情况下,会话结束不会被调用。这也不包括离开页面的用户,因此项目将保持锁定状态,直到超时。此解决方案的问题是,
Session\u End
不保证被调用。不幸的是,你不能过分依赖于
global.asax
中的事件。我的英语不是很好,但在你所有的评论中,我认为,第一次保存的订单赢了,其他人输了:)这只是一种可能性,伙计们。然后使用窗口->关闭或文件->退出(或崩溃/强制关闭浏览器)。。。它是否工作取决于浏览器。代码在窗口关闭和选项卡关闭时进行测试。(取决于浏览器,不一定是操作系统)。对不起,没有得到,我应该在代码中做什么改进?这是最好的方法。请注意,并非所有关闭窗口的操作都会触发该[非标准]事件。
<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
}