在ASP.Net中,为什么我不能从ASPX页面的构造函数中访问服务器控件的属性?

时间:2010-10-10 02:30:11

标签: asp.net

在面向对象语言中,如果类A包含类B作为成员,则可以从类A的构造函数访问类B的属性(在首先实例化类B之后)。

然而在ASP.Net中,我的理解是一个Page对象包含服务器控件对象作为其成员,但我不明白为什么,如果你试图从Page构造函数访问服务器控件的属性,你会得到一个NullReferenceException。

2 个答案:

答案 0 :(得分:4)

这听起来更像是一个生命周期问题。页面上包含的控件不会与Page对象同时创建,但会在httprequest的循环中创建。

此页面清楚地显示了周期:http://msdn.microsoft.com/en-us/library/ms178472.aspx

您应该覆盖Init方法,以确保您的控件已初始化。引自文章

在初始化所有控件并应用任何外观设置后触发。单个控件的Init事件发生在页面的Init事件之前。 使用此事件可以读取或初始化控件属性。

答案 1 :(得分:3)

在构造函数中,ASPX尚未运行,因此所有服务器端控件都是null

将代码移至Page_Load