C# 为什么连续调用Server.Transfer会更改url?

C# 为什么连续调用Server.Transfer会更改url?,c#,asp.net,C#,Asp.net,我正在使用Server.Transfer在单击按钮时加载另一页的内容。这与预期的一样,url保持不变。但是,如果我尝试在第二个页面中单击按钮加载第三个页面,url将更改为第二个页面的url。我希望它保留第一页的url 例如: Page1.aspx加载。 Url:../Page1.aspx 内容:Page1.aspx Server.Transfer(“~/Page2.aspx”)点击按钮。 Url:../Page1.aspx 内容:Page2.aspx Server.Transfer(“~

我正在使用
Server.Transfer
在单击按钮时加载另一页的内容。这与预期的一样,url保持不变。但是,如果我尝试在第二个页面中单击按钮加载第三个页面,url将更改为第二个页面的url。我希望它保留第一页的url

例如:

  • Page1.aspx
    加载。
    • Url:
      ../Page1.aspx
    • 内容:
      Page1.aspx
  • Server.Transfer(“~/Page2.aspx”)
    点击按钮。
    • Url:
      ../Page1.aspx
    • 内容:
      Page2.aspx
  • Server.Transfer(“~/Page3.aspx”)
    点击按钮
    • Url:
      ../Page2.aspx
    • 内容:
      Page3.aspx
  • 为什么url在第三步中会更改?

    这一步可能会有帮助:

    Response.Redirect("~/page.aspx",false)
    

    调用
    Server.Transfer()
    时,第一页的执行将停止,而第二页将在同一HTTP请求中执行。然后,第二个页面(Page2.aspx)将以与直接向其URL发出的任何正常请求相同的方式执行,因此表单的操作将设置为其自己的URL(尽管从
    Server.Transfer()调用)


    如果情况并非如此,则在提交表单时,它将发布到Page1.aspx(如您所期望的),但此页面不一定包含相同的控件,并且能够处理请求。

    您是指返回的URL还是用户地址栏中的URL?Server.Transfer不会更改客户端的URL。在步骤2,您应该检查表单的“操作”属性。我敢打赌它是page2.aspx(这很有意义)@JohnFx我是指地址栏中的url。它确实改变了,这就是我认为奇怪的地方。Tom Haigh的回答(以及jbl的评论)解释了为什么会发生这种情况。啊,这是有道理的。那么有没有办法保存url呢?我想您可以使用用户控件而不是页面,并从单个页面(可能是多视图)管理隐藏/显示的内容等。不过,这很可能最终会变得一团糟,因为您无法直接从URL访问大型viewstate和子页面(也就是说,您必须点击一些回发才能到达任何地方)。你也可以考虑使用iFrAME来屏蔽URL更改,但是这又不是很好。这根本不是OP所要求的。