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服务器。
又利用.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); }
放在redirect前面!
public void Redirect(
string url,
bool endResponse
);参数
url
目标位置。
endResponse
指示当前页的执行是否应终止。
Response.write(<script>window.open('113.aspx','_self','')</script>");
Response.End();
Response.Write("<script>alert('ererer');</script>");(设置断点
后面这句都会执行!!什么原因了??
那么Response.Redirect("User/Login.aspx",true/false);
还有什么意义了??
我昨天用Server.Tranfer的时候还会终止当前页的执行,,今天有让我看到另外的结果!!!晕死!!
www.webdiyer.com
Response.write(<script>alert('ererer');</script>");
好难得看到你~谢谢大家来关注!!
其实我的意思很简单,,我只是在做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的效果都一样,,,文本照样出现!!!
我其实没有任何目的,只是在做这个 东西的偶尔想到的!!上面出现的问题是在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
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 )会立即抛出一个异常
{
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……
_context.IsInCancellablePeriod受System.Web.HttpContext.BeginCancellablePeriod() : Void
System.Web.HttpContext.EndCancellablePeriod() : Void控制。
我还是认为在大多数情况下Response.End会直接Abort Thread,楼主下面的代码被执行应该是别的原因……Response.Redirect会直接执行Response.End
System.Web.HttpContext.EndCancellablePeriod() : Void
在
System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean&) : Exception
被调用。
1。使用Response.Redirect("xx.aspx",true);
这种方法,则此页面不会执行unload事件,将导致你的数据库关闭不起作用,没有关闭
2。使用Response.Redirect("xx.aspx",false);
则会顺利执行本页面的unload事件,关闭了数据库,页面还会把当前这个页面转到新页面xx.aspx
Response.Redirect("", false); //不会
Response.Redirect("h2.aspx"); 同上。Response.Redirect("h2.aspx",false); 会执行后面的代码。然后转向。直接在服务器上就转向了,不会再到客户端的。
正解
大多数情况下一定会Abort Thread……如果不弄清楚楼主到底是因为Abort Thread不能在FileStream前面及时的触发(Abort Thread微软的解释是并不会立即中断线程的执行,而是到安全中断点才中断),还是楼主执行的时候根本就没有Abort Thread。就草率的下结论未免……我待会儿就试一下楼主的那个代码。
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服务器。
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
非常感谢!!!你在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; }