ASP.NET中!IsPostBack和刷新之间的区别

5
我在`!IsPostBack`块中编写了一些代码。当页面第一次加载时,这段代码会被执行,这很好。但是问题是,当我按下`F5`键刷新页面时,它会再次执行,而我不希望这样做。我查阅了许多文章,发现了`PostBack`和刷新之间的区别。我知道这点。但我的问题是`!IsPostBack`和刷新之间的区别。我们能否编写一些仅在页面第一次加载时执行而不在刷新页面时执行的代码?顺便说一下,我已经将我的`!IsPostBack`块编写在`Page_Init()`方法中,并且我正在使用C#进行代码后台处理。谢谢。
2个回答

10

刷新和IsPostback有一定的独立性:

  • 在浏览器中,刷新通常意味着“重新运行导致该页面的最后一个操作”。通常会引起GET请求,但也可能引起POST请求,如果页面是作为postback的结果而显示的。副作用注意:您经常可以找到警告您不要在类似“充值信用卡”的不可逆操作期间刷新页面的网站,因为它可能触发重复的post。
  • IsPostBack仅说明请求作为POST而不是GET发送到服务器。

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

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


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

如果您在首次加载后刷新页面,则“ispostback”将始终为false!因此,除非页面进行一次回发,否则永远不会进入else。 - MAK
@Aristos 这段代码不是针对Javascript的。它在C#中运行良好。 - NCA
@MAK根本不会出现,它会进入else部分。 - NCA
@Aristos 抱歉,我没听懂。 - NCA
@NCA 不用担心,忘了它,我已经删除了这些消息。 - Aristos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接