6

我正在使用 Asp.net 2.0。我server.transfer从第 1 页到第 2 页进行操作。URL 仍然是第 1 页。现在我单击第 2 页上的链接,这会将我转到第 3 页。所以 URL 应该保留第 1 页。相反,浏览器现在显示页面的 URL 2. 这是预期的行为吗?

我实际上是在尝试隐藏 URL 中的参数。

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

谁能指出我正确的方向?

4

1 回答 1

2

这是预期的行为。

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

Postbacks 是 page2 url 泄露的地方,如果它打算被隐藏的话。为了让 page2 内容处理回发,它必须回发到 page2。如果它回发到 page1,page1 将不知道如何处理 viewstate 和 form 事件,因为它们实际上是由 page2 生成的。为了做到这一点,<form>由 page2 服务的元素有一个actionof 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 很容易让用户理解,并且您可以在内部映射到更复杂的参数。

于 2012-08-09T03:57:50.757 回答