【问题标题】:IsPostBack property of the page never gets false even after page refresh即使在页面刷新后,页面的 IsPostBack 属性也不会变为 false
【发布时间】:2012-09-07 11:12:22
【问题描述】:

我陷入了一个非常不寻常的问题。我有一个用 C# 编写的代码,它只是检查Page_Load 上的IsPostBack 属性。我知道IsPostBack 在页面第一次登陆时仍然为假,并且只有当任何控件将表单发布到服务器时才为真(具有runat=sever)。

我还知道,如果我们点击刷新,IsPostBack 属性应该更改为 false(因为刷新不是回发)。

这是示例代码:

if (!IsPostBack)
{
    // If I click on any control on the page, and then hit refresh,
    // the code inside this block should execute, but this is not happening.
    // After first postback, I tried refreshing the page for more than
    // ten times, but always finds IsPostBack=true

    // ...
}
else
{
    // ...
}

我点击了服务器端按钮(回发),然后点击刷新。我认为它会进入 if 块但没有运气。无论我在浏览器上点击刷新多少次,IsPostBack 总是正确的。这真是我以前从未见过的不寻常的活动。

我非常感谢任何帮助。我需要知道为什么会这样,这是与浏览器相关的问题还是其他问题?我使用了 Mozilla 和 chrome。

每次我点击刷新时,我都会在两个浏览器上收到警告。

  • 在 chrome 上:确认表单提交 您正在查找的页面使用了您输入的信息,返回到该页面可能会导致您重复执行的任何操作。您要继续吗?

  • 在 mozilla 上:确认 要显示该页面,firefox 必须发送将重复任何操作的信息...

提前感谢您的帮助。

普雷文

【问题讨论】:

标签: c# asp.net postback


【解决方案1】:

如果您在发布后刷新,大多数浏览器都会发布相同的数据。

这就是你看到的对话的意思(他们在问你是否要重新发布 - 点击是/确定意味着重新发布)。

为了避免重新发布,只需转到地址栏并按回车即可。这将导致新请求成为问题,而不是重新发布。

【讨论】:

  • 谢谢,我试过了,当我在地址栏上按回车键时它起作用了。如果我按 F5 或使用浏览器的刷新按钮,难道不能做同样的事情吗?我可以从我的代码中做些什么来改变这个浏览器的行为还是不可能的?
  • @praveentiwari - 不,您在服务器端无能为力。
【解决方案2】:

浏览器显示的那些对话框告诉您他们将进行回发而不是仅仅获取页面。您可以在代码中看到警告是准确的 - 在原始回发中调用的任何处理程序都将被第二次调用。这是回发的主要问题之一——它们基本上破坏了刷新键。如果您只想加载页面,则必须将鼠标移至地址栏并按 Enter。这将加载 IsPostback 为 false 的页面。

【讨论】:

  • 谢谢,我试过了,当我在地址栏上按回车键时它起作用了。如果我按 F5 或使用浏览器的刷新按钮,难道不能做同样的事情吗?我可以从我的代码中做些什么来改变这个浏览器的行为还是不可能的?
  • 很抱歉,我只能将 1 个回复标记为答案,所以我标记了 Oded 的。无论如何,非常感谢您的帮助。
  • 是的,我当然可以。但是现在我只有 1 个声望点,当我点击投票时,收到警告 - 投票需要 15 个声望点。对不起。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 2012-03-01
相关资源
最近更新 更多