Server.transfer第二次更改URL

Yog*_*dal 5 url asp.net-2.0 server.transfer

我使用的是Asp.net 2.0.我server.transfer从第1页到第2页执行操作.该URL仍然是第1页.现在我单击第2页上的链接,这将转移到第3页.因此URL应保留在第1页.而是浏览器现在显示页面的URL这是预期的行为吗?

我实际上是试图隐藏URL中的参数.

  1. 我无法使用,response.redirect因为我无法从此处访问上一页.
  2. 我尝试使用PostBackUrl,但这对我不起作用,因为我需要将数据保存在当前页面上,如果没有发生错误则显示下一页.如果数据不正确,和/或有错误,那么我需要向用户显示相同的页面.
  3. 现在我想尝试使用server.transfer,但这显示了上一页的URL.

任何人都能指出我正确的方向吗?

Sam*_*eff 2

这是预期的行为。

当您使用Server.TransferASP.NET 时,通过 a 停止处理原始请求,ThreadAbortException然后立即在同一线程中开始处理新请求。新请求运行并将其输出发送到浏览器。浏览器对Server.Transfer. 浏览器所知道的就是它请求了 page1 并且服务器发回了一些内容,作为开发人员,您知道这些内容实际上来自 page2。

如果要隐藏 page2 url,则回发是泄漏的地方。为了让 page2 内容处理回发,它必须回发到 page2。如果它回发到 page1,page1 将不知道如何处理视图状态和表单事件,因为这些事件实际上是由 page2 生成的。为了实现这一点,<form>page2 提供的元素有一个actionof page2。在浏览器中查看 html 源代码后Server.Transfer,您将看到以下内容:

<form name="aspnetForm" method="post" action="Page2.aspx" id="aspnetForm">
Run Code Online (Sandbox Code Playgroud)

使用传统的 Web 表单,对用户完全隐藏 URL 的唯一真正方法是不使用回发,让 page2 上的所有链接实际上链接回 page1,并将所有逻辑添加到 page1 以适当处理它。

或者,您根本无法使用回发。如果您通过 ajax 执行所有操作,则根本不会更改浏览器 url,并且无论如何您都应该能够为用户获得更好的体验。

更好的是使用 ASP.NET MVC,它将您推向友好的类似 REST 的 URL,这些 URL 非常容易让用户理解,并且您可以在内部映射到更复杂的参数。