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