访问Asp.. NET控件在页PreInit事件中

本文关键字:PreInit 事件 Asp NET 控件 访问 | 更新日期: 2023-09-27 18:13:41

在我的Content Page中有如下标记:

<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";
}

我做错了什么?有没有办法让Asp。. NET Web控件中的PreInit事件?

访问Asp.. NET控件在页PreInit事件中

No。PreInit是错误的位置。根据MSDN,控件初始化,然后调用Init

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

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

可以在Pages的PreInit事件中访问Content Page Controls

请理解这不是推荐的方法。

访问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(),因此控件被初始化,不再有对象引用错误。