Asp.Net 中 !IsPostBack 和刷新之间的区别

Difference between !IsPostBack and refresh in Asp.Net

我在!IsPostBack块中写了一些代码。此代码在页面首次加载时执行。那也行。但问题是,当我通过点击 f5 键刷新页面时,这会再次执行,这是我不想做的。我搜索了很多文章,发现 PostBack 和刷新之间的区别。我知道这件事。但我的问题是 !IsPostBack 和 Refresh 之间的区别。我们能否编写一些仅在页面第一次加载时执行的代码,而不是在我们刷新页面时执行的代码。顺便说一句,我已经在 Page_Init() 方法中编写了 !IsPostBack 块,并且我正在使用 c# 进行代码隐藏。谢谢

Refersh 和 IsPostback 有点不相关:

  • 浏览器刷新一般表示"re-run last action that resulted in this page"。通常它会导致 GET 请求,但如果页面显示为 postback 的结果,它也可能导致 POST。旁注:您经常会发现网站警告您不要在 "charge my credit card" 等不可逆操作期间刷新页面,因为它可能会触发重复 post.
  • IsPostBack 只是声明请求作为 POST 到达服务器,而不是 GET。

结合您可以获得触发 if (IsPostBack) 检查任一分支的刷新。在大多数情况下,服务器将收到 GET 请求并因此执行 !IsPostBack 分支。

如果您确实需要检测页面是否已呈现一次 - 设置 cookie 或将信息写入 Session 将是合理的解决方案。

请更改您的隐藏代码,如下所示。

        Boolean IsPageRefresh;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ViewState["postids"] = System.Guid.NewGuid().ToString();
                Session["postid"] = ViewState["postids"].ToString();
            }
            else
            {
                if (ViewState["postids"].ToString() != Session["postid"].ToString())
                {
                    IsPageRefresh = true;
                }
                Session["postid"] = System.Guid.NewGuid().ToString();
                ViewState["postids"] = Session["postid"].ToString();
            }
        }