HttpContext.Current.Response与Page.Response应该是同一个HttpResponse的对象,它负责将 HTTP 响应数据发送到客户端。他们的作用都是一样的,但是在Page_UnLoad中却要写成HttpContext.Current.Response,这是什么原因呢?

解决方案 »

  1.   

    HttpContext.Current.Response:当前请求的Response对象,在不同的时候这个的返回值是不一样的。
    Page.Response:当前页面的Response对象。如果请求的是同一个页面,它们是一样的。HttpContext.Current.Response能获取到网站当前任何页面正在相应的请求的Response对象,而Page.Response只是当前页面。比较拗口。
      

  2.   

    对于HttpContext.Current.Response,有可能这一秒是获取到的是甲用户的Response对象,下一秒就是乙用户的Response对象了,它永远是服务器当前处理当前请求的Response对象,这个对象可能是针对不同用户或者不同页面的请求。而Page.Response永远是处理当前页面时的Response对象。
      

  3.   

    使用时有明显不同
    page.response只能在当前页使用
    而httpcontext.current.response可在任何地方使用
      

  4.   

    在Page_UnLoad中使用Response?已经晚了,这时候不可能在输出信息给此页面的客户端了。一定要限制在Render结束之前使用Response。
      

  5.   

    似乎还是没有说清楚为什么要使用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...了呢?
      

  6.   

    页面已经卸载了就没法page.response了
      

  7.   

    Page_Unload时页面没了 所以只能用HttpContext.Current.Response
      

  8.   


    是当前进程当前线程,不要误导别人以为同一时间IIS只能处理一个请求。两个Page完全可以同时在两个线程中独立进行,甚至在两个进程中独立进行,这都不重要。所有HttpContext.Current,就是当前线程的Http上下文。
      

  9.   

    Page_Unload:
    在卸载阶段,页及其控件已被呈现,因此无法对响应流做进一步更改。如果尝试调用方法(如 Response.Write 方法),则该页将引发异常。Response.Write()默认是page的.HttpContext.Current.Response是当前线程上下文件的response对象
      

  10.   

    至于楼主的问题,任何人打开Reflector看一下都能看明白,楼上的那么多有星的人都不实实在在地去看一下,就在那里扯各种大道理。用Reflector打开看,Page上的Response属性内部存储是_response变量。有一个私有函数ProcessPageCleanup()专门负责在页面逻辑完成时做一些清理工作,其中包括_response = null。在Page的处理主函数,也就是ProcessPage()当中,会在处理完后调用ProcessPageCleanup()。
      

  11.   

    原因我已经说了.
    Page_Unload阶段 页及其控件已被呈现,因此无法对响应流做进一步更改response默认是page的.
    HttpContext.Current.Response是当前线程上下文的.
      

  12.   

    支持哈。一个是http请求上下文的响应信息,一个是页面上的,页面上的已经卸载了,在去使用就会出错。最直观的就是可以看到HttpContext.Current.Response输出的在页面尾部。