如何在ASP.NET PreInit事件中获得控制权?

时间:2010-07-01 15:18:07

标签: asp.net null controls preinit

如何在ASP.NET PreInit事件中获得控制权?指针为null,FindControl方法返回null。

我正在使用主页和内容页面。 内容页面的标记如下所示:

<asp:Content ID="Content2" ContentPlaceHolderID="ContentBody" runat="server">
   <asp:Table ID="Table1" runat="server" Width="100%">
      .....
   </asp:Table>
</asp:Content>

这样的代码:

private void Page_PreInit(object sender, EventArgs e)
{
    Control table = this.FindControl("Table1");
    //table is null here
}

因此,在this.FindControl(“Table1”)之后,表仍然为null。该页面的NamingContainer也为null。我做错了什么?

更新我必须使用此事件来创建控件。如ASP.NET Page Life Cycle Overview中所述,此事件应用于动态控件创建。我需要在表格中创建一个链接列表。可能还有另一种方法吗?

4 个答案:

答案 0 :(得分:5)

在初始化控件之前触发PreInit。请阅读ASP.NET Page Life Cycle以获取更多详细信息。

  

初始
  在所有控件初始化和任何皮肤后引发   设置已应用。初始   发生个别控制事件   在页面的Init事件之前。

     

使用此事件进行阅读或初始化   控制属性。

答案 1 :(得分:1)

在PreInit()事件中,尚未在该阶段创建标准(已定义)控件,因此您无法获得对任何控件的任何引用。

使用Page_Load()事件创建动态控件。在此活动期间,您可以将任何动态控件添加到现有控件中。

在Page_Load()中创建动态控件后,使用PreRender()进行任何更改/更新。

就个人而言,我使用PreInit来定义页面范围的对象(即数据库连接,用户会话对象)以及我执行安全认证检查(如果未经授权则重定向)的地方。

答案 2 :(得分:1)

在初始化控件之前触发了Page的PreInit事件,因此控件尚不存在。您必须在以后的事件中访问该控件,例如Page的Load事件。请参阅http://msdn.microsoft.com/en-us/library/ms178472.aspx

答案 3 :(得分:0)

有和没有母版页的页面之间都有区别,如HERE中所述。

如果没有母版页,则可以在PreInit事件中创建控件并将其添加到现有控件中,但是如此处答案所示,有了母版页,您仍无法访问现有控件,因此您必须在其中创建动态控件之后的事件,例如Init事件。

由于使用的是母版页,因此应在以后的事件(如Init事件)中创建动态控件,或尝试Valio在此提供的选项。