我注意到在这两种情况下,浏览器中的URL仍然是第一页URL(不刷新到新页面URL),因为不要求浏览器这样做。
任何评论明显......
答案 0 :(得分:22)
Orignal at:Difference between Server.Transfer and Server.Execute
Server.Transfer和Server.Execute都是在Classic ASP 3.0中引入的(并且仍在ASP.NET中工作)。
使用Server.Execute时,会将URL作为参数传递给它,控件将移动到此新页面。代码的执行发生在新页面上。一旦代码执行结束,控件就会在调用它之后返回到初始页面。但是,在Server.Transfer的情况下,它的工作方式非常相似,不同之处在于新页面本身的执行停止(意味着控件不会返回到调用页面)。
在这两种情况下,浏览器中的URL仍然是第一个页面URL(不刷新到新页面URL),因为浏览器没有被要求这样做。
答案 1 :(得分:3)
我知道这已经过时了,但是当我在谷歌上搜索时它出现了第一次或第二次。我做了一些测试,想发布结果。
我创建了一个2页的网站。第一页上的页面加载包含代码..
try {
//Response.Redirect("~/WebForm2.aspx");
//Server.Transfer("~/WebForm2.aspx");
//Server.Execute("~/WebForm2.aspx");
//Server.TransferRequest("~/WebForm2.aspx");
string strTry = "Try";
} catch (Exception ) {
string strCatch = "Catch";
} finally {
string strFinally = "Finally";
}
它为每个人做的顺序是真正有趣的......
Command Sequence Redirect Call, Catch (ThreadAbortException), Finally, Load Page 2 Transfer Call, Load Page 2, Catch (ThreadAbortException), Finally Execute Call, Load Page 2, Try (continues), Finally TransferRequest Call, Try (continues), Finally, Load Page 2
..因此,了解您希望事情发生的顺序可能会有所帮助。
我个人喜欢当前代码完成的想法,在下一页的代码开始之前。因此,无论是Redirect还是TransferRequest,虽然使用后者,但如果您真的打算不执行try块的其余部分,则可能必须在调用之下添加“return”。
答案 2 :(得分:2)
我认为这可能会对你有所帮助
<强> Server.Transfer的强>
Server.Transfer用于将控件从一个页面传输到另一个页面。控制在另一个页面上执行代码,但控件不会返回到上一页。 在这种情况下,URL不会在浏览器中更改。 它无法导航到应用程序的外部页面。 语法:Server.Transfer(“另一页面的URL”); 它可以访问新页面上的上一页控件。 PreviousPage.FindControl()在新页面上可用。 它通过避免额外的往返来节省服务器资源。
<强>使用Server.Execute 强>
Server.Execute用于将控件从一个页面传输到另一个页面。控制另一页面上的执行代码并返回上一页。 在这种情况下,URL不会在浏览器中更改。 它无法导航到应用程序的外部页面。 语法:Server.Execute(“另一页面的URL”); 它可以访问新页面上的上一页控件。 PreviousPage.FindControl()在新页面上可用。 它通过避免额外的往返来节省服务器资源。