得到旧的“对象引用未设置为对象的实例”错误。为了缩写,将所有内容缩短:
.ascx 文件:
<asp:Label ID="lblcategory" runat="server" Text="Label"></asp:Label>
.ascx.cs 文件:
public partial class NewsArticleContainer : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
public NewsArticleContainer()
{
lblcategory.Text = "hello there!"; //null reference exception
}
}
然后,在使用 web.config 文件注册此用户控件后,我将其放入另一个页面。
.aspx 文件:
<MyUC:NewsArticleContainer runat="server"/>
如果我将该lblcategory.Text = "hello there!"
行放在 Page_Load 中并将其从构造函数中注释掉,它就可以正常工作。但是,稍后,我希望能够以编程方式添加此用户控件的实例(即mypanel.Controls.Add(new NewsArticleContainer(x))
,其中 x 是 NewsArticle)。
我已经知道需要使用 LoadControl 来通过用户控件执行此操作 --- 这不是问题。问题是我无法从用户控件的构造函数访问用户控件中的 Web 控件。
我在写这个的时候突然想到:在用户控件的情况下,Page_Load 是否相当于传统意义上的构造函数,即创建一个类的实例,而传统的构造函数 public ClassName()不应该触摸或修改 UserControl?