关于HttpContext.Current.Response与Page.Response的疑问?

cooolchen 2008-11-03 04:09:23
HttpContext.Current.Response与Page.Response应该是同一个HttpResponse的对象,它负责将 HTTP 响应数据发送到客户端。他们的作用都是一样的,但是在Page_UnLoad中却要写成HttpContext.Current.Response,这是什么原因呢?
...全文
1124 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruanwei1987 2011-10-31
  • 打赏
  • 举报
回复
mark
代码小天王 2011-10-31
  • 打赏
  • 举报
回复
支持哈。一个是http请求上下文的响应信息,一个是页面上的,页面上的已经卸载了,在去使用就会出错。最直观的就是可以看到HttpContext.Current.Response输出的在页面尾部。
[Quote=引用 13 楼 cat_hsfz 的回复:]
引用 3 楼 zhoufoxcn 的回复:
对于HttpContext.Current.Response,有可能这一秒是获取到的是甲用户的Response对象,下一秒就是乙用户的Response对象了,它永远是服务器当前处理当前请求的Response对象,这个对象可能是针对不同用户或者不同页面的请求。

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


是当……
[/Quote]
lep0315 2011-08-31
  • 打赏
  • 举报
回复
路过学习
jinianjun 2011-04-02
  • 打赏
  • 举报
回复
高手在不敢发言
zhangw1990 2010-10-29
  • 打赏
  • 举报
回复
学习了
meceky 2010-06-14
  • 打赏
  • 举报
回复
随便看看。用心学学!
illidancool 2010-03-04
  • 打赏
  • 举报
回复
学习了,高手在不敢发言:)
skyaspnet 2009-05-24
  • 打赏
  • 举报
回复
学习
Jack123 2008-11-04
  • 打赏
  • 举报
回复
up
w161134025 2008-11-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhoufoxcn 的回复:]
HttpContext.Current.Response:当前请求的Response对象,在不同的时候这个的返回值是不一样的。
Page.Response:当前页面的Response对象。

如果请求的是同一个页面,它们是一样的。HttpContext.Current.Response能获取到网站当前任何页面正在相应的请求的Response对象,而Page.Response只是当前页面。

比较拗口。
[/Quote]

支持他的看法
cooolchen 2008-11-04
  • 打赏
  • 举报
回复
似乎还是没有说清楚为什么要使用HttpContext.Current的原因?只是说明了使用HttpContext.Current的时间和地方。(这个我懂,我在写代码的时侯都是能分清楚的,在什么时候用,在什么地方用HttpContext.Current这都没问题)

我是想知道在Page_load里可以直接Response.Write,
而Page_UnLoad里确要HttpContext.Current.Respone.Write

Page_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...了呢?


lovehongyun 2008-11-04
  • 打赏
  • 举报
回复
原因我已经说了.
Page_Unload阶段 页及其控件已被呈现,因此无法对响应流做进一步更改

response默认是page的.
HttpContext.Current.Response是当前线程上下文的.
qinhl99 2008-11-04
  • 打赏
  • 举报
回复
学习了,高手在不敢发言:)
cat_hsfz 2008-11-04
  • 打赏
  • 举报
回复
至于楼主的问题,任何人打开Reflector看一下都能看明白,楼上的那么多有星的人都不实实在在地去看一下,就在那里扯各种大道理。

用Reflector打开看,Page上的Response属性内部存储是_response变量。有一个私有函数ProcessPageCleanup()专门负责在页面逻辑完成时做一些清理工作,其中包括_response = null。在Page的处理主函数,也就是ProcessPage()当中,会在处理完后调用ProcessPageCleanup()。
lovehongyun 2008-11-04
  • 打赏
  • 举报
回复
Page_Unload:
在卸载阶段,页及其控件已被呈现,因此无法对响应流做进一步更改。如果尝试调用方法(如 Response.Write 方法),则该页将引发异常。

Response.Write()默认是page的.

HttpContext.Current.Response是当前线程上下文件的response对象
cat_hsfz 2008-11-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhoufoxcn 的回复:]
对于HttpContext.Current.Response,有可能这一秒是获取到的是甲用户的Response对象,下一秒就是乙用户的Response对象了,它永远是服务器当前处理当前请求的Response对象,这个对象可能是针对不同用户或者不同页面的请求。

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

是当前进程当前线程,不要误导别人以为同一时间IIS只能处理一个请求。

两个Page完全可以同时在两个线程中独立进行,甚至在两个进程中独立进行,这都不重要。所有HttpContext.Current,就是当前线程的Http上下文。
maybe5 2008-11-04
  • 打赏
  • 举报
回复
Mark
扎德 2008-11-04
  • 打赏
  • 举报
回复
Page_Unload时页面没了 所以只能用HttpContext.Current.Response
gjfizx 2008-11-04
  • 打赏
  • 举报
回复
页面已经卸载了就没法page.response了
cooolchen 2008-11-04
  • 打赏
  • 举报
回复
为100顶
加载更多回复(5)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧