我的方法需要以下功能:如果在ASP.NET生命周期的OnLoad
事件之前调用该方法抛出异常,则继续执行该方法。
我在考虑这样的事情:
if (Page.LifeCycleState < LifeCycleState.OnLoad) {
throw new InvalidPageStateException();
}
是否可以检索ASP.NET页面生命周期的状态?
答案 0 :(得分:4)
一种方法是使用您在网站中始终使用的基页。这将包含一个名为PageLoadComplete的变量,您可以在PageLoad事件结束时设置该变量。然后,您可以在方法中检查此变量的状态。
public abstract class BasePage : System.Web.UI.Page
{
public bool PageLoadComplete { get; private set; }
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
PageLoadComplete = true;
}
}
如果要从页面外部的代码(例如UserControl)访问变量,则必须将其公开并将页面强制转换为BasePage。
public partial class MyUserControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
BasePage basePage = this.Page as BasePage;
if (basePage != null && !basePage.PageLoadComplete)
{
throw new InvalidPageStateException();
}
}
}
答案 1 :(得分:1)
System.Web.UI.Control类(realization)的实现中有属性:
internal ControlState ControlState {
get { return _controlState; }
set { _controlState = value; }
}
其中ControlState是包含以下成员的枚举:Initialized,ViewStateLoaded,Loaded等here declaration
但是你可以看到这个属性是内部的。因此,丹尼尔戴森提出了获得控制状态的唯一方法。
答案 2 :(得分:0)
通过查看当前CurrentHandler
的{{1}}和PreviousHandler
属性,您可以找到所需内容。
答案 3 :(得分:0)
如果在ASP.NET生命周期的OnLoad事件之前调用该方法 抛出异常,否则继续执行该方法。
目前尚不清楚Onload事件的含义,以及&#34;方法&#34;驻留。它是Page的Onload还是Control的OnLoad?它是一种Page&#34;方法&#34;或者对照&#34;方法&#34;?
无论如何,可以在Context.Items字典中存储一种标记,所有控件(包括Page)在请求期间都可以访问。这消除了使用像建议的obove一样的一般基页的需要。
在OnLoad方法中(无论是Page的OnLoad还是Control的OnLoad):
Context.Items[UniqueID] = this;
在&#34;方法&#34;:
if (Context.Items[UniqueID] != null)
{
throw new InvalidPageStateException();
}