NullReferenceException设置自定义用户Web控件的标签文本

时间:2013-03-06 20:28:20

标签: c# asp.net c#-4.0 custom-controls nullreferenceexception

我正在尝试将自定义用户Web控件的标签文本设置为

Email em = new Email(); //Email is the class of the custom user web control
em.setEmail(email);
Panel2.Controls.Add(em);

控件中的setEmail()函数将标签lblEmail的值设置为

public void setEmail(string recEmail)
{
        lblEmail.Text = recEmail;
}

但我收到以下错误: enter image description here

调试时,我看到recEmail正在获取所提供的值。但不将其分配给lblEmail.Text

我认为这可能是由于控制注册问题,所以我将其注册为

<%@ Register Src="~/Email.ascx" tagname="Email" TagPrefix="uc1" %>

我也尝试在setEmail()函数中设置值,如下所示:

public void setEmail(string recEmail)
{
        string a=recEmail;
        lblEmail.Text = a;
}

调试时显示a的值为recEmail,但未分配给lblEmail.Text

由于我无法上传整个代码,因此请注意以下几点:

  1. 名为Panel2的面板位于UpdatePanel中,在电子邮件控制添加到面板后,它会有条件地更新。
  2. Email.ascx文件位于调用它的文件的父文件夹中。表示如果Email.ascx在A文件夹中,则调用它的文件位于A / B文件夹中。但我不这么认为会产生影响。刚才提到的是为您提供有关情况的完整信息。
  3. 请告诉我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:3)

默认情况下,用户控件的成员在初始化之前为null。并且在用户控件(和页面,可能还有一些其他类似类型)的构造函数中不会发生初始化。当控件被“加载”到某种上下文中时,就会发生这种情况。

而不是像这样初始化:

Email em = new Email();

看看the LoadControl() method。你应该像这样初始化它:

Email em = (Email)LoadControl("Email.ascx");

这将通过触发其内置页面生命周期事件来初始化用户控件,其中UI控件已初始化。