2012-09-07 72 views
2

我陷入了一个非常不寻常的问题。我有一个用C#编写的代码,它只需检查Page_Load上的IsPostBack属性。我知道IsPostBack在页面首次着陆时保持为假,只有当任何控件将表单发送到服务器(具有runat=sever)时,bocme才为真。即使页面刷新后,页面的IsPostBack属性也不会变为假。

我也知道如果我们点击刷新,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:确认表单提交 你要找二手信息您输入,返回到该页面可能会导致你采取是要继续repeated.Do任何操作的网页?

  • 在Mozilla:确认 要显示此页面,火狐必须发送信息,将重复的任何行动......

预先感谢任何形式的帮助。如果您发布后刷新

普利文

+2

在许多浏览器中,帖子后的刷新导致重新发布。 – Oded

+0

这个问题相似吗? http://stackoverflow.com/questions/5920569/refresh-of-page-set-postback-true – Niklas

回答

1

大多数浏览器会做相同的数据的一个职位。

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

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

+0

谢谢,我试过,当我在地址栏上输入时,它工作。如果我按F5或使用浏览器的刷新按钮,将不可能处理相同的操作吗?我可以从我的代码中做些什么来改变这种浏览器行为,或者它不可能吗? –

+0

@praveentiwari - 不,你可以在服务器端做什么。 – Oded

1

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

+0

谢谢,我试过了,当我在地址栏上输入时,它就起作用了。如果我按F5或使用浏览器的刷新按钮,将不可能处理相同的操作吗?我可以从我的代码中做些什么来改变这种浏览器行为,或者它不可能吗? –

+0

我很抱歉,但我只能标记1个回答作为答案,所以我标记了Oded的。不管怎样,谢谢你的帮助。 –

+0

你可以upvote两个! – bmm6o