我正在重写的Page OnUnload中运行一个方法,但前提是Page_PreRender方法已经运行。
显然,当我在Page_PreRender中并且在OnUnload中检查它时,我可以翻转一个类级别的bool,但如果有一个更内在的方式来判断Page_PreRender已运行,我想使用它。
有什么想法吗?
感谢您的任何想法。
更新:让我稍微改一下我的问题。我正在寻找一个简单的方法的答案,这个方法是页面生命周期中固有的,也许是由ASP.Net frameowork设置的属性,也许是其他东西,在Page_PreRender运行后与Page_PreRender有不同之处不跑。
我目前在Page_PreRender中设置一个布尔值来告诉我它是否已经运行。它有效,但我不喜欢这个解决方案,如果有一种方法可以完成相同的事情,而无需添加额外的布尔检查。如果可能的话,创建一个在Page_PreRender期间触发的事件与我希望避免的冗余级别相同。
答案 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。