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

时间:2015-01-07 07:06:33

标签: c# asp.net

我在!IsPostBack块中编写了一些代码。第一次加载页面时,将执行此代码。那样就好。但问题是,当我通过点击 f5 键刷新页面时,这会再次执行,我不想这样做。我搜索了很多文章,发现PostBack和刷新之间存在差异。我知道这件事。但我的问题是!IsPostBack和刷新之间的区别。我们可以编写一些代码,这些代码仅在第一次加载页面时执行,而不是在刷新页面时执行。顺便说一句,我在!IsPostBack方法中编写了Page_Init()块,我使用c#代码隐藏。感谢。

2 个答案:

答案 0 :(得分:10)

Refersh和IsPostback有点不相关:

  • 在浏览器中刷新通常意味着"重新运行导致此页面的最后一个操作"。通常它会导致GET请求,但如果页面显示为回发的结果,它也会导致POST。附注:您经常可以找到网站,警告您在非可逆操作期间不要刷新页面,例如"从我的信用卡中收取费用"因为它可能触发重复的帖子。
  • IsPostBack只是声明请求作为POST来到服务器,而不是GET。

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

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

答案 1 :(得分:-1)

请更改代码,如下所示。

        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();
            }
        }