访问页面PreInit事件中的Asp.NET控件

时间:2015-09-21 15:58:23

标签: c# asp.net .net

我的内容页面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控件?

2 个答案:

答案 0 :(得分:3)

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

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

您应该考虑重新设计逻辑,将任何数据传递给Init

答案 1 :(得分: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(),因此控件初始化并且没有更多的对象引用错误。