【问题标题】:Access Asp.NET controls in page PreInit event在页面 PreInit 事件中访问 Asp.NET 控件
【发布时间】:2015-09-21 15:58:22
【问题描述】:

我的内容页面 default.aspx 中有以下标记:

<asp:Content ID="Content2" ContentPlaceHolderID="ContentBody" runat="server">
  <asp:label ID="label1" runat="server"></label>
</asp:Content>

在 PreInit 事件中访问标签时,显示错误是-对象引用未设置为对象的实例

private void Page_PreInit(object sender, EventArgs e)
{
    label1.Text = "Inside PreInit";
}

我做错了什么?有没有办法在 Page PreInit 事件中获取 Asp.NET Web 控件?

【问题讨论】:

    标签: c# asp.net .net


    【解决方案1】:

    没有。 PreInit 是错误的地方。根据 MSDN,控件被初始化然后Init 被调用。

    https://msdn.microsoft.com/en-us/library/ms178472.aspx#lifecycle_events

    您应该考虑重新编写逻辑以将任何数据传递给Init

    【讨论】:

      【解决方案2】:

      是的,您可以在 Pages 的 PreInit 事件中访问内容页面控件。

      了解这不是推荐的方式。请参阅 Daniel 的回答。

      Page_PreInit 事件中访问Page.Master 属性,之后您可以照常访问所有内容页面控件:

      public partial class _Default : Page
          {
              protected void Page_PreInit(object sender, EventArgs e)
              {
                  MasterPage master = this.Master; 
      
                  // Access any control of Content Page now ....
                  label1.Text = "Inside PreInit";
      
              }
          }
      

      为什么会这样:

      一旦访问 Page 的 Master 属性,它就会调用 CreateChildControls(),因此控件会被初始化并且不会再出现对象引用错误。

      【讨论】:

        猜你喜欢
        • 2013-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-04
        • 2013-11-09
        • 1970-01-01
        • 2011-02-28
        • 1970-01-01
        相关资源
        最近更新 更多