1

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

我实际上是在尝试隐藏页面 URL。

任何人都可以帮我解决这个问题。

我知道堆栈溢出有重复的问题,但没有任何令人信服的答案,而且问题也有 4 年历史。请帮助我或建议更好的方法来实现这一点

代码 :

在第 1 页

Btn1_Click(object sender, EventArgs e)
{

server.Transfer("Page2.aspx");

}

在第 2 页

Btn2_Click(object sender, EventArgs e)
{

server.Transfer("Page3.aspx");

}
4

2 回答 2

3

记住 “Server.Transfer 不会更改地址栏中的 URL”

检查此站点,您将清楚地了解 Server.Transfer 和 Response.Redirect

https://www.youtube.com/watch?v=xJVjRUHXYbE&index=54&list=PL6n9fhu94yhXQS_p1i-HLIftB9Y7Vnxlo

使用 Server.Transfer 时

例如:

Page1.aspx、Page2.aspx

在 page1.aspx 中假设按钮中的代码单击如下

Server.Transfer("~/page2.aspx");

然后您将重定向到 page2.aspx 但地址栏中显示的 url 相同,即;page1.aspx 即使您在 page2.aspx 中。

当您使用 Response.Redirect 时,它会在您重定向到 page2.aspx 时显示 page2.aspx

来回答你的问题:

这是预期的行为。

如果您第二次使用 Server.Transfer,您会询问 Url 更改

如果您是第一次运行 page1.aspx,它会显示

Address Bar : `http://localhost:1234/WebSite3/Page1.aspx`

Action Name : "page1.aspx"//see pagesource

如果您单击 page1.aspx 中的按钮,它将显示 page2.aspx 但具有相同的 URL,例如:

Address Bar : `http://localhost:1234/WebSite3/Page1.aspx`  but different

Action Name="page2.aspx"//see pagesource

如果您单击 page2.aspx 中的按钮,它将显示 page3.aspx 但具有不同的 url,例如:

Address Bar : `http://localhost:1234/WebSite3/Page2.aspx`  but different 

Action Name="page3.aspx"//see pagesource

在这里您可以找到不同的 url,因为尽管您的 url 是 page1.aspx,但您的请求来自 page2.aspx,请参阅页面源。因此,url 从 page1.aspx 更改为 page2.aspx。

于 2014-05-09T07:23:41.943 回答
2

Arjun,您 page2.aspx 在呈现后正在进行服务器调用。正是该服务器调用导致名称更改。Server.Transfer 不会更改您的姓名。

检查这个问题是否发生在 IE 中,如果没有,您可能会丢失页面引用的某些图像。否则使用提琴手观看服务器调用

于 2015-07-07T13:23:31.293 回答