这是预期的行为。
当您使用Server.Transfer
ASP.NET 时,通过 a 停止处理原始请求ThreadAbortException
,然后立即在同一个线程中开始处理新请求。新请求运行并将其输出发送到浏览器。浏览器对Server.Transfer
. 浏览器所知道的只是它请求了 page1 并且服务器将其发回了一些内容,正如您所知道的开发人员实际上来自 page2。
Postbacks 是 page2 url 泄露的地方,如果它打算被隐藏的话。为了让 page2 内容处理回发,它必须回发到 page2。如果它回发到 page1,page1 将不知道如何处理 viewstate 和 form 事件,因为它们实际上是由 page2 生成的。为了做到这一点,<form>
由 page2 服务的元素有一个action
of page2
。之后在浏览器中查看您的 html 源代码Server.Transfer
,您会看到:
<form name="aspnetForm" method="post" action="Page2.aspx" id="aspnetForm">
使用传统的 Web 表单,对用户完全隐藏 URL 的唯一真正方法是不使用回发,并且让 page2 上的所有链接实际链接回 page1,并将所有逻辑添加到 page1 以适当地处理它。
或者,您根本不能使用回发。如果您通过 ajax 完成所有操作,那么浏览器 url 根本不会发生变化,无论如何您应该能够为用户获得更好的体验。
更好的是使用 ASP.NET MVC,它将您推向友好的类似 REST 的 url,这些 url 很容易让用户理解,并且您可以在内部映射到更复杂的参数。