如何判断Page_PreRender是否已运行?

时间:2011-05-19 16:30:26

标签: asp.net onunload prerender

我正在重写的Page OnUnload中运行一个方法,但前提是Page_PreRender方法已经运行。

显然,当我在Page_PreRender中并且在OnUnload中检查它时,我可以翻转一个类级别的bool,但如果有一个更内在的方式来判断Page_PreRender已运行,我想使用它。

有什么想法吗?

感谢您的任何想法。

更新:让我稍微改一下我的问题。我正在寻找一个简单的方法的答案,这个方法是页面生命周期中固有的,也许是由ASP.Net frameowork设置的属性,也许是其他东西,在Page_PreRender运行后与Page_PreRender有不同之处不跑。

我目前在Page_PreRender中设置一个布尔值来告诉我它是否已经运行。它有效,但我不喜欢这个解决方案,如果有一种方法可以完成相同的事情,而无需添加额外的布尔检查。如果可能的话,创建一个在Page_PreRender期间触发的事件与我希望避免的冗余级别相同。

7 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

答案是肯定的,你可以,但不总是:) 根据Reflection代码,ScriptManager类包含私有bool字段_preRenderCompleted,在处理内部true接口IPage事件时设置为PagePreRenderComplete。 您可以使用Reflection从ScriptManager.GetCurrent(page)结果对象

中获取此字段

答案 2 :(得分:0)

我不确定你到底是什么意思。根据{{​​3}} PreRender总是在Unload之前运行。如果你在这个PreRender事件中执行了一些if条件,并且你想在Unload中测试条件是否满足,那么页面类上的布尔字段似乎是个好主意。

答案 3 :(得分:0)

将trace = true添加到页面指令。

答案 4 :(得分:0)

在PreRender事件处理程序中设置一个布尔字段,然后检查它是否在Unload事件处理程序中设置。

答案 5 :(得分:0)

创建在PreRender事件中触发的自定义事件。

答案 6 :(得分:0)

我不认为存储任何类型的状态,因为ASP.NET引擎并不真正需要它,因为它隐含地知道它的状态。

使用.NET Reflector进行搜索,似乎从此内部System.Web.UI.Page方法引发了页面呈现事件:

private void ProcessRequestMain(bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint)

你可以看看它,没有国家的概念。您可以获得的唯一信息是跟踪。如果您有权访问Unload事件,那么您应该可以访问跟踪吗?或者我想念一些事情: - )

由于跟踪实际上是一个数据集底层(请参阅我的答案:Logging the data in Trace.axd to a text/xml file),您可能会获得该信息。但 虽然......不推荐在生产中设置trace = true。