当前位置: 代码迷 >> ASP.NET >> 关于HttpContext.Current.Response与Page.Response的疑问?解决办法
  详细解决方案

关于HttpContext.Current.Response与Page.Response的疑问?解决办法

热度:6589   发布时间:2013-02-25 00:00:00.0
关于HttpContext.Current.Response与Page.Response的疑问?
HttpContext.Current.Response与Page.Response应该是同一个HttpResponse的对象,它负责将 HTTP 响应数据发送到客户端。他们的作用都是一样的,但是在Page_UnLoad中却要写成HttpContext.Current.Response,这是什么原因呢?

------解决方案--------------------------------------------------------
mark! 跟着学习下
------解决方案--------------------------------------------------------
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。
------解决方案--------------------------------------------------------
up
------解决方案--------------------------------------------------------
页面已经卸载了就没法page.response了
------解决方案--------------------------------------------------------
Page_Unload时页面没了 所以只能用HttpContext.Current.Response
------解决方案--------------------------------------------------------
探讨
对于HttpContext.Current.Response,有可能这一秒是获取到的是甲用户的Response对象,下一秒就是乙用户的Response对象了,它永远是服务器当前处理当前请求的Response对象,这个对象可能是针对不同用户或者不同页面的请求。

而Page.Response永远是处理当前页面时的Response对象。

------解决方案--------------------------------------------------------
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是当前线程上下文的.
  相关解决方案