Server.Transfer()与。使用Server.Execute()

时间:2012-02-13 13:31:42

标签: c# asp.net

对于调用页面(第一页)和来电者页面(新页面)的请求,哪一个更好或效果混淆...

我注意到在这两种情况下,浏览器中的URL仍然是第一页URL(不刷新到新页面URL),因为不要求浏览器这样做。

任何评论明显......

3 个答案:

答案 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()在新页面上可用。 它通过避免额外的往返来节省服务器资源。