关于HttpContext.Current.Response与Page.Response的疑问? HttpContext.Current.Response与Page.Response应该是同一个HttpResponse的对象,它负责将 HTTP 响应数据发送到客户端。他们的作用都是一样的,但是在Page_UnLoad中却要写成HttpContext.Current.Response,这是什么原因呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 HttpContext.Current.Response:当前请求的Response对象,在不同的时候这个的返回值是不一样的。Page.Response:当前页面的Response对象。如果请求的是同一个页面,它们是一样的。HttpContext.Current.Response能获取到网站当前任何页面正在相应的请求的Response对象,而Page.Response只是当前页面。比较拗口。 对于HttpContext.Current.Response,有可能这一秒是获取到的是甲用户的Response对象,下一秒就是乙用户的Response对象了,它永远是服务器当前处理当前请求的Response对象,这个对象可能是针对不同用户或者不同页面的请求。而Page.Response永远是处理当前页面时的Response对象。 使用时有明显不同page.response只能在当前页使用而httpcontext.current.response可在任何地方使用 在Page_UnLoad中使用Response?已经晚了,这时候不可能在输出信息给此页面的客户端了。一定要限制在Render结束之前使用Response。 似乎还是没有说清楚为什么要使用HttpContext.Current的原因?只是说明了使用HttpContext.Current的时间和地方。(这个我懂,我在写代码的时侯都是能分清楚的,在什么时候用,在什么地方用HttpContext.Current这都没问题)我是想知道在Page_load里可以直接Response.Write,而Page_UnLoad里确要HttpContext.Current.Respone.WritePage_Load和Page_Unload都是同一个页面对象的事件,to:zhoufoxcn “Page.Response:当前页面的Response对象。 ” 根据页面的生命周期: protected void Page_PreInit(object sender, EventArgs e) { Response.Write("Page_PreInit...<br/>"); } protected void Page_Init(object sender, EventArgs e) { Response.Write("Page_Init...<br/>"); } protected void Page_InitComplete(object sender, EventArgs e) { Response.Write("Page_InitComplete...<br/>"); } protected void Page_PreLoad(object sender, EventArgs e) { Response.Write("Page_PreLoad...<br/>"); } protected void Page_Load(object sender, EventArgs e) { Response.Write("Page_Load...<br/>"); } protected void Page_LoadComplete(object sender, EventArgs e) { Response.Write("Page_LoadComplete...<br/>"); } protected void Page_PreRender(object sender, EventArgs e) { Response.Write("Page_PreRender...<br/>"); } protected void Page_PreRenderComplete(object sender, EventArgs e) { Response.Write("Page_PreRenderComplete...<br/>"); } protected void Page_SaveStateComplete(object sender, EventArgs e) { Response.Write("Page_SaveStateComplete...<br/>"); } protected void Page_Unload(object sender, EventArgs e) { //Response.Write("Page_Unload...<br/>"); HttpContext.Current.Response.Write("Page_Unload...<br/>"); } protected void Page_Disposed(object sender, EventArgs e) { } 只有在Disposed以后,页面才被销毁。那么在Page_Unload的时候,Page对象还是在的,那为什么就不能Page.Response.Write...了呢? 页面已经卸载了就没法page.response了 Page_Unload时页面没了 所以只能用HttpContext.Current.Response 是当前进程当前线程,不要误导别人以为同一时间IIS只能处理一个请求。两个Page完全可以同时在两个线程中独立进行,甚至在两个进程中独立进行,这都不重要。所有HttpContext.Current,就是当前线程的Http上下文。 Page_Unload:在卸载阶段,页及其控件已被呈现,因此无法对响应流做进一步更改。如果尝试调用方法(如 Response.Write 方法),则该页将引发异常。Response.Write()默认是page的.HttpContext.Current.Response是当前线程上下文件的response对象 至于楼主的问题,任何人打开Reflector看一下都能看明白,楼上的那么多有星的人都不实实在在地去看一下,就在那里扯各种大道理。用Reflector打开看,Page上的Response属性内部存储是_response变量。有一个私有函数ProcessPageCleanup()专门负责在页面逻辑完成时做一些清理工作,其中包括_response = null。在Page的处理主函数,也就是ProcessPage()当中,会在处理完后调用ProcessPageCleanup()。 原因我已经说了.Page_Unload阶段 页及其控件已被呈现,因此无法对响应流做进一步更改response默认是page的.HttpContext.Current.Response是当前线程上下文的. 支持哈。一个是http请求上下文的响应信息,一个是页面上的,页面上的已经卸载了,在去使用就会出错。最直观的就是可以看到HttpContext.Current.Response输出的在页面尾部。 问个小问题,repeater怎么并排显示? 高手来下,ASP。NET上传大文件 如何实现页面动态时钟? 一条sql语句 关于动态导航栏连接的问题 不是技术的技术问题 DataGrid 显示样式 datagrid的问题,如何带checkbox并知道哪行被选中? 初学者关于“拒绝访问”的问题????? 明天下午7:00-8:30,重量级人物要来微软聊天室做客,大家有空去看看。聊天室主持人:Scott Worley,《Inside ASP.NET》作者 如何设置TreeView父节点节点上的CheckBox的背景色 数据类型 text 和 varchar 在 equal to 运算符中不兼容。
Page.Response:当前页面的Response对象。如果请求的是同一个页面,它们是一样的。HttpContext.Current.Response能获取到网站当前任何页面正在相应的请求的Response对象,而Page.Response只是当前页面。比较拗口。
page.response只能在当前页使用
而httpcontext.current.response可在任何地方使用
而Page_UnLoad里确要HttpContext.Current.Respone.WritePage_Load和Page_Unload都是同一个页面对象的事件,to:zhoufoxcn
“Page.Response:当前页面的Response对象。 ” 根据页面的生命周期:
protected void Page_PreInit(object sender, EventArgs e)
{
Response.Write("Page_PreInit...<br/>");
} protected void Page_Init(object sender, EventArgs e)
{
Response.Write("Page_Init...<br/>");
}
protected void Page_InitComplete(object sender, EventArgs e)
{
Response.Write("Page_InitComplete...<br/>");
} protected void Page_PreLoad(object sender, EventArgs e)
{
Response.Write("Page_PreLoad...<br/>");
} protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Page_Load...<br/>");
} protected void Page_LoadComplete(object sender, EventArgs e)
{
Response.Write("Page_LoadComplete...<br/>");
}
protected void Page_PreRender(object sender, EventArgs e)
{
Response.Write("Page_PreRender...<br/>");
}
protected void Page_PreRenderComplete(object sender, EventArgs e)
{
Response.Write("Page_PreRenderComplete...<br/>");
}
protected void Page_SaveStateComplete(object sender, EventArgs e)
{
Response.Write("Page_SaveStateComplete...<br/>");
}
protected void Page_Unload(object sender, EventArgs e)
{
//Response.Write("Page_Unload...<br/>");
HttpContext.Current.Response.Write("Page_Unload...<br/>");
}
protected void Page_Disposed(object sender, EventArgs e)
{
} 只有在Disposed以后,页面才被销毁。那么在Page_Unload的时候,Page对象还是在的,那为什么就不能Page.Response.Write...了呢?
是当前进程当前线程,不要误导别人以为同一时间IIS只能处理一个请求。两个Page完全可以同时在两个线程中独立进行,甚至在两个进程中独立进行,这都不重要。所有HttpContext.Current,就是当前线程的Http上下文。
在卸载阶段,页及其控件已被呈现,因此无法对响应流做进一步更改。如果尝试调用方法(如 Response.Write 方法),则该页将引发异常。Response.Write()默认是page的.HttpContext.Current.Response是当前线程上下文件的response对象
Page_Unload阶段 页及其控件已被呈现,因此无法对响应流做进一步更改response默认是page的.
HttpContext.Current.Response是当前线程上下文的.