Server.Transfer之后的IE和Firefox不同的回发行为

时间:2009-10-06 18:30:05

标签: c# asp.net firefox internet-explorer

我有2个aspx页面,在第1页的回发事件中,我将数据添加到当前上下文,然后执行server.transfer到第2页。这一切都按预期工作,但是由于server.transfer,地址栏仍显示第1页的网址。

当我点击第2页的按钮时,会出现奇怪的现象。

在IE(7或8)中,当我点击第2页上的按钮时,页面会按预期发布到第2页。

在Firefox中,当我点击第2页上的按钮时,页面会发布到第1页。

还有其他人经历过这个吗? 难道我做错了什么? 有解决方法吗?

这基本上是第1页中的代码

Context.Items["x"] = x.Checked;
Context.Items["y"] = y.Checked;
Context.Items["z"] = z.Checked;
Server.Transfer( "page2.aspx", false );

3 个答案:

答案 0 :(得分:2)

改为进行跨页回发吗?

MSDN: Cross-Page Posting in ASP.NET

答案 1 :(得分:1)

您可以尝试将form.action设置为要发布到的特定页面。

第2页的表单加载事件:

Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Me.Form.Action = "page2.aspx"
End Sub

这应该保证发布到正确的页面。

答案 2 :(得分:1)

如果您未使用PreviousPage,则可以使用Response.Redirect("~/Page2.aspx");。这将通知用户的浏览器页面更改。

或者,如果您使用PreviousPage,请在所需的PostBackUrl上设置Button属性,以使用跨页回复。这样可以正确处理Server.Transfer逻辑。要访问CheckBox的值,您需要在Page1上创建可通过PreviousPage访问的公共属性。

因此Page1将在后面的代码中包含这些属性:

public bool xChecked { get x.Checked; }
public bool yChecked { get y.Checked; }
public bool zChecked { get z.Checked; }

Page2将使用PreviousPage:

protected void Page_Load()
{
    if(PreviousPage != null && PreviousPage is Page1)
    {
        if(((Page1)PreviousPage).xChecked)
        {
            //use xChecked like this
        }
    }
}