为什么我们不能在Page_Unload事件上使用Response.Write?

时间:2012-04-24 13:11:04

标签: c# asp.net

我在Respose.Write事件中使用Page_Unload,然后收到错误

  

在此背景下无法获得响应。

我可以知道为什么我们不能使用?

protected void Page_Unload(object sender, System.EventArgs e)
{
  Response.Write(" hi ");
}

5 个答案:

答案 0 :(得分:4)

来自the ASP.NET Page Lifecyle上的MSDN文章:

  

在卸载阶段,页面及其控件已呈现,   因此您无法对响应流进行进一步更改。 如果你   尝试调用一个方法,如Response.Write方法,页面   将抛出异常

因此,根据文档,您尝试做的事实上是不受支持的。

这在逻辑上是有道理的。在卸载页面时,浏览器无需来自该页面的进一步响应。这实际上就是执行清理的地方。

MSDN上也提到了一些常见的用例:

对于用户控件:

  

...使用此事件对特定控件进行最终清理,例如关闭特定于控件的数据库连接。

对于整个页面:

  

...使用此事件执行最终清理工作,例如关闭打开的文件和数据库连接,或完成日志记录或其他特定于请求的任务。

答案 1 :(得分:4)

这是因为在呈现页面后触发了Unload事件。该页面已经完成,在前往浏览器的路上,您不再可以写入响应流。

答案 2 :(得分:3)

在将页面发送回客户端之后发生Unload事件。现在写入“响应”为时已晚。

请参阅ASP.NET Page Life Cycle文档。

答案 3 :(得分:2)

记住 - 在卸载阶段,页面及其控件已呈现,因此您无法对响应流进行进一步更改。如果您尝试调用Response.Write方法等方法,该页面将抛出exception

此时页面已经以HTML格式呈现,HTML无法修改。尽管如此,所有页面对象都可用。

请参阅ASP.NET page lifecycle

答案 4 :(得分:2)

了解页面生命周期:http://msdn.microsoft.com/en-us/library/ms178472.aspx

UnLoad在渲染后出现,所以此时你已经尽可能地输出到屏幕上了。