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

Mil*_*ara 21 c# asp.net

我很困惑哪一个更好或有效请求呼叫页面(第一页)和来电者页面(新页面)...

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

任何评论明显....

Pra*_*ana 23

Orignal at:Server.Transfer和Server.Execute之间的区别

Server.Transfer和Server.Execute都是在Classic ASP 3.0中引入的(并且仍在ASP.NET中工作).

使用Server.Execute时,会将URL作为参数传递给它,并且控件将移动到此新页面.代码的执行发生在新页面上.一旦代码执行结束,控件就会在调用它之后返回到初始页面.但是,在Server.Transfer的情况下,它的工作方式非常相似,不同之处在于新页面本身的执行停止(意味着控件不会返回到调用页面).

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


小智 5

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

我创建了一个有 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";
}
Run Code Online (Sandbox Code Playgroud)

它为每个人所做的事情的顺序是非常有趣的......

命令            序列               
重定向调用,捕获(ThreadAbortException),最后加载页面2
转移调用,加载页面2,捕获(ThreadAbortException),最后
执行调用、加载第 2 页、尝试(继续)、最后
TransferRequest 调用,尝试(继续),最后加载页面 2

.. 因此,了解您希望事情发生的顺序可能会有所帮助。

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