ASP.NET WebForm 检测页面刷新(Refresh)

本文是翻译贴, 原文参见Detecting browser 'Refresh' from Code behind in C#

浏览器的"刷新"常会导致问题, 特别是当页面和数据库有交互的时候, 结果可能更糟. 因为, 每次页面刷新, 如果没有经过代码处理, 就会重复做一次数据库操作.

这就可能导致数据的不一致, 甚至程序挂掉.

检测"刷新"的一种方法就是用JavaScript禁用掉F5和右击事件. 但就算这么做了, 终端用户还是有N种其它方法来刷新页面的, 比如, Ctrl+R.

最好的防止"刷新"是代码被重复调用的方法还是在服务器端做检查, 并经行处理.

下面的代码放在page_load方法中, 它可以检测"刷新":

bool IsPageRefresh = false;
//this section of code checks if the page postback is due to genuine submit by user or by pressing "refresh"
if (!IsPostBack)
{
    ViewState["ViewStateId"] = System.Guid.NewGuid().ToString();
    Session["SessionId"] = ViewState["ViewStateId"].ToString();
}
else
{
    if (ViewState["ViewStateId"].ToString() != Session["SessionId"].ToString())
    {
        IsPageRefresh = true;
    }
    Session["SessionId"] = System.Guid.NewGuid().ToString();
    ViewState["ViewStateId"] = Session["SessionId"].ToString();
}     

(译注: 它是怎么工作的? 自己试试看吧 -- 有时候当搞清楚了问题本身, 解决问题的方法也就有了)

之后, 就可以在后台代码中用"IsPageRefresh"来判断一个PostBack是来自用户点击按钮还是浏览器的"刷新"啦.

希望对你有所帮助!

转载于:https://www.cnblogs.com/Freeway/p/detecting-browser-refresh-from-code-behind-in-asp-dotnet.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值