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

发布于 2024-09-07 11:19:13 字数 779 浏览 6 评论 0原文

如何在 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") 之后表仍然为空。页面的 NamingContainer 也为 null。我做错了什么?

更新 我必须使用此事件来创建控件。正如 ASP.NET 页面生命周期概述中所述,此事件应该是用于动态控件创建。我需要在表中创建链接列表。也许还有另一种方法可以做到这一点?

How to get control in ASP.NET PreInit event? Pointers are null and FindControl method returns null.

I am using master and content pages.
Markup of the content page looks like this:

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

And code like this:

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

So table still is null after this.FindControl("Table1"). NamingContainer of the page is null too. What am I doing wrong?

UPDATE I have to use this event to create controls. As said in the ASP.NET Page Life Cycle Overview this event should be used for dynamic control creation. I need to create a list of links in my table. May be there is another way to do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

相权↑美人 2024-09-14 11:19:13

PreInit 在控件初始化之前触发。请阅读 ASP.NET 页面生命周期以获取更多详细信息。

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

使用此事件来读取或初始化
控制属性。

PreInit is fired before the controls are initialized. Read up on the ASP.NET Page Life Cycle for more detailed information.

Init
Raised after all controls have been initialized and any skin
settings have been applied. The Init
event of individual controls occurs
before the Init event of the page.

Use this event to read or initialize
control properties.

三寸金莲 2024-09-14 11:19:13

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

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

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

就我个人而言,我使用 PreInit 来定义页面范围的对象(即数据库连接、用户会话对象),并且仅在其中执行安全身份验证检查(如果未经授权则进行重定向)。

In the PreInit() event, standard (defined) controls have not been created yet at that stage, thus you cannot get any reference to any controls.

Use the Page_Load() event to create dynamic controls. During this event, you can add any dynamic controls into existing controls.

After creating the dynamic controls in Page_Load(), use the PreRender() to make any changes/updates.

Personally, I use PreInit to define page wide objects (ie, database connections, user session objects) and also where I perform security authentication checks (and redirects if not authorized) only.

煮酒 2024-09-14 11:19:13

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

The Page's PreInit event is triggered before the controls are initialized, so controls do not exist yet. You will have to access the control in a later event, such as the Page's Load event. Please see http://msdn.microsoft.com/en-us/library/ms178472.aspx.

橘味果▽酱 2024-09-14 11:19:13

有或没有母版页的页面之间存在差异,如此处所述 在问题和答案中。

如果没有母版页,您可以在 PreInit 事件中创建控件并将它们添加到现有控件,但使用母版页您还无法访问现有控件,如此处答案中所述,因此您必须在稍后的事件中创建动态控件就像 Init 事件一样。

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

There's a difference between Pages with or without a Master Page as explained HERE in the Question and Answers.

Without a Master Page you can create controls in the PreInit event and add them to an existing control but with a Master Page you cannot access the existing controls yet, as explained in the answers here, so you have to create dynamic controls in a later event like the Init event.

Since you are using a Master Page you should create your dynamic controls in a later event like the Init event or try the option given there by Valio.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文