为什么在Page_PreInit生命周期事件中已经创建的标记中定义的ASP.NET控件

时间:2015-01-13 17:19:19

标签: asp.net page-lifecycle

我读了Microsoft's article on ASP.Net Page Life Cycle events。它混淆了一件事。调用Page_PreInit时,所有控件都会被调用。尚未调用Init方法。当我设置测试项目时,我观察到了不同的行为。在标记中,我创建了asp标签和按钮控件并设置了某些属性,例如Text。我在Page_PreInit的开头设置了一个断点。当断点被击中时,我通过Watch窗口中的ID来检查控件是否已创建。它们都存在,没有返回null。然后我检查了Text属性,这是我在标记中设置的内容。那么这与微软所说的相矛盾吗?如果是这种情况,那么控件是什么? Init方法是否已初始化?有什么我想念的吗?

1 个答案:

答案 0 :(得分:1)

  

我创建了asp标签和按钮控件并设置了某些属性   比如文字。 ...然后我检查了Text属性,这就是我设置的内容   在标记中。

如果您在 设计时 设置属性值,则它们位于控制树中,因此所有事件都可以使用属性。

但是,如果您添加TextBox并且用户点击提交,则 TextBox文字属性仅在 Page_Load 事件中启用。

原因是Page_Load是从视图状态和控件状态恢复的信息加载属性的地方。

看一下这个例子

<asp:Label runat="server" ID="Label1" Text="Name" />
<asp:TextBox runat="server" ID="TextBox1" />
<asp:PlaceHolder runat="server" ID="PlaceHolder1" />
<asp:Button runat="server" ID="SubmitButton"
    Text="Submit" OnClick="SubmitButton_Click" />

enter image description here

回发后,

enter image description here

enter image description here

请注意,您只能在Page_Load事件中检索TextBox值。

enter image description here