C# Server.Transfer()与Server.Execute()的比较

C# Server.Transfer()与Server.Execute()的比较,c#,asp.net,C#,Asp.net,我不知道哪一个更好或对呼叫页面(第一页)和呼叫页面(新页面)的请求效果更好 我注意到,在这两种情况下,浏览器中的URL仍然是第一个页面URL(不会刷新到新页面URL),因为浏览器没有被请求这样做 任何值得注意的评论 原件地址: Server.Transfer和Server.Execute都是在经典的ASP 3.0中引入的(现在仍然可以在ASP.NET中使用) 当使用Server.Execute时,一个URL作为参数传递给它,控件移动到此新页面。代码在新页面上执行。一旦代码执行结束,控件将返回初始

我不知道哪一个更好或对呼叫页面(第一页)和呼叫页面(新页面)的请求效果更好

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

任何值得注意的评论

原件地址:

Server.Transfer和Server.Execute都是在经典的ASP 3.0中引入的(现在仍然可以在ASP.NET中使用)

当使用Server.Execute时,一个URL作为参数传递给它,控件移动到此新页面。代码在新页面上执行。一旦代码执行结束,控件将返回初始页面,就在调用它的位置之后。但是,在Server.Transfer的情况下,它的工作原理基本相同,不同之处在于执行会在新页面本身停止(意味着控件不会返回到调用页面)


在这两种情况下,浏览器中的URL仍然是第一页URL(不刷新为新页URL),因为浏览器没有被请求这样做

我知道这很古老,但当我在谷歌上搜索时,它是第一个或第二个热门。我做了一些测试,想发布结果

我创建了一个有2个页面的网站。第1页的页面加载包含代码

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 命令序列 重定向调用,捕获(ThreadAbortException),最后加载第2页 转接呼叫,加载第2页,捕获(ThreadAbortException),最后 执行调用,加载第2页,尝试(继续),最后 TransferRequest调用,尝试(继续),最后加载第2页 。。因此,了解事情发生的顺序可能会有所帮助


我个人喜欢在下一页代码开始之前完成当前代码的想法。因此,无论是Redirect还是TransferRequest,尽管使用后者,如果您确实想让它不执行try块的其余部分,您可能必须在调用下方添加一个“return”。

@Thit-Response。Redirect是一种else@ThitLwinOo,他询问有关
Server.Transfer vs.Server.Execute的信息,不是关于
Response.Redirect vs.Server.Transfer