c# - 检测在调试中有效但在生产中无效的刷新/回发条件

标签 c# asp.net master-pages page-refresh

在网上搜索后,似乎有一个强烈的共识,即防止刷新触发数据库访问的好方法是使用 ViewState 变量和 Session 变量来检测条件。这是我的基页面类中的代码:

    protected override void OnLoad( EventArgs e )
    {
        base.OnLoad( e ); 

        if ( IsPostBack && ViewState["REFRESH_CHECK"] != Session["REFRESH_CHECK"] )
        {
            IsRefresh = true;
        }
        Session["REFRESH_CHECK"] = System.Guid.NewGuid().ToString();
        ViewState["REFRESH_CHECK"] = Session["REFRESH_CHECK"];
    }

    public virtual bool IsRefresh
    {
        get;
        private set;
    }

因此,在我的页面中,我有一些如下所示的代码:

    protected void Page_Load( object sender, EventArgs e )
    {
        if ( !IsPostBack )
        {
            if ( !IsRefresh )
            {
                doStuffThatShouldOnlyBeDoneOnce();
            }
        }
    }

这在调试时工作得很好,但是当我在生产系统上运行时,我总是会两次调用 doStuff...() 方法。当然,当我调试它时,只有一次调用。

它可能相关,也可能不相关,但我也在使用嵌套母版页。

有什么想法吗?

最佳答案

噢,请不要使用此代码,这可能会破坏您的网页。对于一个简单的测试,尝试使用两个不同的选项卡打开同一页面,您将看到解决方案失败了。 F5 刷新问题的唯一解决方案是 Response.Redirect。 我已经尝试过这个解决方案,所以我根据我的经验告诉你。

关于c# - 检测在调试中有效但在生产中无效的刷新/回发条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12975725/

相关文章:

c# - 无效的 View 状态,Base-64 字符数组或字符串的无效长度

c# - 如何将自定义 css 样式表添加到 Umbraco Admin

asp.net - 在ASP.NET内容页面上设置ScriptManager AsyncPostBackTimeout值

css - 如何在不修改母版页的情况下将 CSS 添加到内容页?

c# - 如何简化用于设置模拟的 It.IsAny<T>() 参数

c# - ASP NET session 使用 .ToString() 抛出错误

c# - 无法在 DbContext EF Core 上禁用延迟加载和代理创建

c# - SqlCommand.ExecuteReader 并越过第一行

sharepoint - 嵌入在 SharePoint 2013 Masterpage 中的 SandBox Webpart 给出错误

c# - 适用于 .NET 的 AWS 开发工具包 - IAmazonS3 不包含 'PutObject' 的定义