区别!IsPostBack 并在 Asp.Net 刷新

本文关键字:Net 刷新 Asp 并在 IsPostBack 区别 | 更新日期: 2023-09-27 18:36:28

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

区别!IsPostBack 并在 Asp.Net 刷新

Refersh和IsPostback有些不相关:

  • 在浏览器中刷新通常意味着"重新运行导致此页面的最后一个操作"。通常它会导致 GET 请求,但如果页面显示为回发的结果,它也可能导致 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();
            }
        }