代码之家  ›  专栏  ›  技术社区  ›  Petr Kozelek

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

  •  4
  • Petr Kozelek  · 技术社区  · 14 年前

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

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

    4 回复  |  直到 14 年前
        1
  •  4
  •   abatishchev Marc Gravell    14 年前

    一种方法是使用您在站点中经常使用的基页。这将包含一个名为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();
            }
        }
    }
    
        2
  •  1
  •   chapluck    14 年前

    财产的实现是有财产的系统.Web.UI.控制类( realization ):

        internal ControlState ControlState { 
            get { return _controlState; }
            set { _controlState = value; } 
        } 
    

    其中ControlState是包含以下成员的枚举:Initialized、ViewStateLoaded、Loaded等。 here declaration

    但正如你所见,这个属性是内部的。所以获得控制状态的唯一方法是由danieldyson提出的。

        3
  •  0
  •   leppie    14 年前

    CurrentHandler PreviousHandler 电流的特性 HttpContext .

        4
  •  0
  •   Don P    10 年前

    如果在的OnLoad事件之前调用该方法ASP.NET生命周期 抛出异常,否则继续执行该方法。

    不清楚Onload事件是什么意思,也不清楚“方法”在哪里。是页面的加载还是控件的加载?是页的“方法”还是控件的“方法”?

    在OnLoad方法中(无论是页的OnLoad还是控件的OnLoad):

    Context.Items[UniqueID] = this;
    

    if (Context.Items[UniqueID] != null) 
    {
        throw new InvalidPageStateException();
    }