比如:
Response.Redirect("sret.aspx");
Response.write(<script>alert('ererer');</script>");
这样后面那句会不会起作用!!

解决方案 »

  1.   

    应该不会!
    放在redirect前面!
      

  2.   

    [C#]
    public void Redirect(
       string url,
       bool endResponse
    );参数
    url 
    目标位置。 
    endResponse 
    指示当前页的执行是否应终止。
      

  3.   

    不起作用了,但是如果是用 script转向,就要这样。
    Response.write(<script>window.open('113.aspx','_self','')</script>");
    Response.End();
      

  4.   

    同楼上.麻烦帮我顶顶http://community.csdn.net/Expert/topic/4658/4658211.xml?temp=.7477991
      

  5.   

    很奇怪的是,即使我用了Response.Redirect("User/Login.aspx",true/false);
      Response.Write("<script>alert('ererer');</script>");(设置断点
    后面这句都会执行!!什么原因了??
      

  6.   

    Response.write(<script>alert('ererer');location.href='sret.aspx';</script>");
      

  7.   

    断点执行那时后台代码的执行顺序,当然会全部执行完.但是当后代执行完转到前台的时候先执行了redirect后执行write.所以直接跳转了,不会有alert.
      

  8.   

    to :楼上的
    那么Response.Redirect("User/Login.aspx",true/false);
    还有什么意义了??
      

  9.   

    现在都晕了!1
    我昨天用Server.Tranfer的时候还会终止当前页的执行,,今天有让我看到另外的结果!!!晕死!!
      

  10.   

    你的<script>标记中的代码是客户端脚本,它必须在客户端才能执行,你的页面在把这段客户端脚本发送到客户端前就已经跳转到user/login.aspx页面,也就是包含你要执行客户端脚本的页面根本就没有发送到客户端,其中的客户端脚本自然就没法执行,如果你想在客户端弹出提示框然后跳转,那就不能用Response.Redirect在服务器端跳转,而必须用类似于window.location="user/login.aspx"这样的方式来跳转。========================
    www.webdiyer.com
      

  11.   

    随便说一下,这个问题和Response.Redirect方法调用后页面是否终止执行毫无关系,无论其后的代码是否执行,当前页面都不会被发送到客户端,它在服务器端就跳转了
      

  12.   

    Response.write(<script>window.location="sret.aspx";</script>);
    Response.write(<script>alert('ererer');</script>");
      

  13.   

    to:webdiyer(陕北吴旗娃) 
    好难得看到你~谢谢大家来关注!!
    其实我的意思很简单,,我只是在做test
    因为我无法理解在 msdn上的说法response.redirect("dd.aspx",true)这样的话,,终止当前页面(这句的意思)
    我对最终render到IE的信息不关心,,,换一个例子:
    Response.Redirect("User/Login.aspx",true/false);或者Server.Transfer(("User/Login.aspx");
    FileStream fs=new FileStream("t.txt",Mode);
    StreamWrter sw=new StrramWriter(fs);
    sw.WriteLine("ertwetfksk");
    sw.close();
    return;
    以上边这个为例,起初按找我的设想是,跳转以后后面就不会创建文本文件了,但是实际上不管是用Redirect还是Transfer的效果都一样,,,文本照样出现!!!
      

  14.   

    to:dolfen(海之豚(每天进步一点点)) 
    我其实没有任何目的,只是在做这个 东西的偶尔想到的!!上面出现的问题是在g***的Session_Start()这个里面测试的!!!我后来有把这段放一个aspx页面后,,情况又不一样!!
    先不说Transfer,,,说说redirect吧!!
    下面情况:
    Response.Redirect("def.aspx",true)或者Response.Redirect("def.aspx")效果一样,
    可以终止本页的执行,,也就是说没有render但是另外一种情况:
    Response.Redirect("def.aspx",false)
    int i=0;
    ----
    上面这个情况,,,本页有render要执行,,但最后在客户端(IE)上会发生跳转,,
    现在修改一下,
    Response.Redirect("def.aspx",false)
    Response.Write("<script>alert('');</script>");//加上这句后就,,嘿嘿,,自己测试
    int i=0;
    ----
    在客户端依然呈现的本页,,也就是客户端没跳到def.aspx上,,但是ie地址拦变了!!
    很奇怪啊 1!!我也是偶然遇到的,,其实就程序来说,,这没什么意义,,只是发现了没找到原因,,心里一直不爽11
      

  15.   

    Response.Redirect只是向浏览器发送一个Redirect的指令,其后的输出浏览器应该会自动忽略。至于这个:
    Response.Redirect("User/Login.aspx",true/false);或者Server.Transfer(("User/Login.aspx");
    FileStream fs=new FileStream("t.txt",Mode);
    StreamWrter sw=new StrramWriter(fs);
    sw.WriteLine("ertwetfksk");
    sw.close();
    return;
    是不可能的,Response.Redirect( "User/Login.aspx",true )会立即抛出一个异常
      

  16.   

    楼主没有搞清楚“终止执行当前页面”和“停止执行代码”两者的概念,终止执行当前页面并不是你Response.Redirect(url,true)之后这个方法后边的代码就不会执行了,而是这个页面的生命周期到此结束了,它引发了Response.End()方法,这个方法又引发了Application_EndRequest事件,如果你要在Response.Redirect()方法之后停止执行后面的代码,应该是用return语句来返回
      

  17.   

    Response.End的源代码……public void End()
    {
          if (this._context.IsInCancellablePeriod)
          {
                InternalSecurityPermissions.ControlThread.Assert();
                Thread.CurrentThread.Abort(new HttpApplication.CancelModuleException(false));
          }
          else if (!this._flushing)
          {
                this.Flush();
                this._ended = true;
                if (this._context.ApplicationInstance != null)
                {
                      this._context.ApplicationInstance.CompleteRequest();
                }
          }

    分析ing……
      

  18.   

    查到
    _context.IsInCancellablePeriod受System.Web.HttpContext.BeginCancellablePeriod() : Void
    System.Web.HttpContext.EndCancellablePeriod() : Void控制。
    我还是认为在大多数情况下Response.End会直接Abort Thread,楼主下面的代码被执行应该是别的原因……Response.Redirect会直接执行Response.End
      

  19.   

    System.Web.HttpContext.BeginCancellablePeriod() : Void
    System.Web.HttpContext.EndCancellablePeriod() : Void

    System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean&) : Exception
    被调用。
      

  20.   

    比如说吧:假设你在页面的unload事件里面要执行某些操作,比如在页面打开时打开数据库,而本来此页面的unload事件里面默认关闭数据库。如果:
    1。使用Response.Redirect("xx.aspx",true);
    这种方法,则此页面不会执行unload事件,将导致你的数据库关闭不起作用,没有关闭
    2。使用Response.Redirect("xx.aspx",false);
    则会顺利执行本页面的unload事件,关闭了数据库,页面还会把当前这个页面转到新页面xx.aspx
      

  21.   

    Response.Redirect("", true); //会
    Response.Redirect("", false); //不会
      

  22.   

    Response.Redirect("h2.aspx",true);  不执行后面的代码,立刻转向
    Response.Redirect("h2.aspx");  同上。Response.Redirect("h2.aspx",false); 会执行后面的代码。然后转向。直接在服务器上就转向了,不会再到客户端的。
      

  23.   

    jyk(喜欢编程。和气生财。共同提高。共同进步) 
    正解
      

  24.   

    多谢各位!!!我想webdiyer(陕北吴旗娃)说的“终止执行当前页面”和“停止执行代码”这个是对的!
      

  25.   

    我想webdiyer(陕北吴旗娃)说的“终止执行当前页面”和“停止执行代码”这个是对的!
    大多数情况下一定会Abort Thread……如果不弄清楚楼主到底是因为Abort Thread不能在FileStream前面及时的触发(Abort Thread微软的解释是并不会立即中断线程的执行,而是到安全中断点才中断),还是楼主执行的时候根本就没有Abort Thread。就草率的下结论未免……我待会儿就试一下楼主的那个代码。
      

  26.   

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.IO;public partial class Test1 : System.Web.UI.Page
    {
      protected void Page_Load( object sender, EventArgs e )
      {
        Response.Redirect( "User/Login.aspx", true );
        FileStream fs = new FileStream( @"c:\t.txt", FileMode.Create );
        StreamWriter sw = new StreamWriter( fs );
        sw.WriteLine( "ertwetfksk" );
        sw.Close();
        return;  }
    }
    结果是根本就没有C:\t.txt被创建……测试环境:Windows Server 2003/Visual Studio 2005 Team Suite/.NET Framework 2.0.50727/使用的是VS2005自带的Web服务器。
      

  27.   

    又利用.NET Framework 1.1进行了一次测试,这一次的测试代码是:
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.IO;
    namespace MzdSp.Web
    {
      /// <summary>
      /// Test1 的摘要说明。
      /// </summary>
      public class Test1 : System.Web.UI.Page
      {
        protected void Page_Load( object sender, EventArgs e )
        {
          Response.Redirect( "User/Login.aspx", true );
          FileStream fs = new FileStream( @"c:\t.txt", FileMode.Create );
          StreamWriter sw = new StreamWriter( fs );
          sw.WriteLine( "ertwetfksk" );
          sw.Close();
          return;    }    #region Web 窗体设计器生成的代码
        override protected void OnInit(EventArgs e)
        {
          //
          // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
          //
          InitializeComponent();
          base.OnInit(e);
        }

        /// <summary>
        /// 设计器支持所需的方法 - 不要使用代码编辑器修改
        /// 此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {    
          this.Load += new System.EventHandler(this.Page_Load);
        }
        #endregion
      }
    }
    测试环境:Windows Server 2003/Visual Studio.NET 2003/.NET Framework 1.1.4322/IIS 6.0
      

  28.   

    忘了说结果了,结果仍然是没有t.txt被创建,为了证明是Response.Redirect导致的结果,将这一行注释掉在2.0下成功创建了文件。
      

  29.   

    1.1下也成功创建了文件,为了避开权限,我设置了Everyone的完全控制。
      

  30.   

    事实证明Response.Redirect是会中断程序的执行的……
      

  31.   

    to:Ivony() 
    非常感谢!!!你在page派生的页面文件做测试,,是不会执行Response.Redirect后语句,,但是你把同样的代码段放到下面的文件中在试验了!!!!在Global.asax文件里面你在做测试!!protected void Session_Start(Object sender, EventArgs e)
    {
     HttpCookie cookie=Request.Cookies[login.CK_UserCookie];
     cookie=null;
    Response.Redirect("~/login.aspx");
    FileStream fs = new FileStream( @"c:\t.txt", FileMode.Create );
    StreamWriter sw = new StreamWriter( fs );
    sw.WriteLine( "ertwetfksk" );
    sw.Close();
    return; }
      

  32.   

    这个就好理解了,Response不能在这里抛出异常,否则会让HTTP执行管线出大毛病,因为在执行Page的时候,是在外面捕获了线程被终止的异常的。也就是说Response.End并不总是终止代码的执行。但在Page中,却总是这样的……
      

  33.   

    也就是说Response.Redirect总是会终止当前页的执行这句话还是对的……要知道很多业务逻辑都是依赖于这句话的……容不得马虎……