获取ASP.NET页面生命周期的状态

时间:2010-08-25 07:41:50

标签: asp.net page-lifecycle

我的方法需要以下功能:如果在ASP.NET生命周期的OnLoad事件之前调用该方法抛出异常,则继续执行该方法。

我在考虑这样的事情:

if (Page.LifeCycleState < LifeCycleState.OnLoad) {
    throw new InvalidPageStateException();
}

是否可以检索ASP.NET页面生命周期的状态?

4 个答案:

答案 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?它是一种Pa​​ge&#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();
}