我的内容页面default.aspx:
中有以下标记<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";
}
我做错了什么?有没有办法在Page PreInit事件中获取Asp.NET Web控件?
答案 0 :(得分:3)
没有。 PreInit
是错误的地方。根据MSDN,控件初始化然后调用Init
。
https://msdn.microsoft.com/en-us/library/ms178472.aspx#lifecycle_events
您应该考虑重新设计逻辑,将任何数据传递给Init
。
答案 1 :(得分:2)
是的,您可以访问Pages的PreInit
活动中的内容页面控件。
明白这不是推荐的方法。请参阅Daniel的答案。
访问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()
,因此控件初始化并且没有更多的对象引用错误。