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

我在想这样的事情:

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


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

最佳答案

一种方法是使用您始终在网站中使用的Basepage。这将包含一个名为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();
        }
    }
}

07-26 00:31