【问题标题】:Server.Transfer() Vs. Server.Execute()Server.Transfer() 与。服务器.执行()
【发布时间】:2012-02-13 13:31:41
【问题描述】:

我对调用页面(第一页)和调用者页面(新页面)的请求哪个更好或效果感到困惑......

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

任何可感知的cmets ....

【问题讨论】:

  • @Thit - Response.Redirect 是别的东西
  • @ThitLwinOo,他问的是Server.Transfer vs Server.Execute,而不是Response.Redirect vs. Server.Transfer

标签: c# asp.net


【解决方案1】:

原文于: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),因为没有请求浏览器这样做。

【讨论】:

    【解决方案2】:

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

    我创建了一个有 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";
    }
    

    它为每个所做的事情的顺序是真正有趣的......

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

    .. 所以知道你喜欢事情发生的顺序可能会有所帮助。

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

    【讨论】:

      猜你喜欢
      • 2016-11-21
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多