C# 设置自定义用户web控件的标签文本时出现NullReferenceException

C# 设置自定义用户web控件的标签文本时出现NullReferenceException,c#,asp.net,c#-4.0,custom-controls,nullreferenceexception,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()函数将标签的值设置为 public void setEmail(string recEmail) { lblEmail.Text = recEmail; } 但

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

Email em = new Email(); //Email is the class of the custom user web control
em.setEmail(email);
Panel2.Controls.Add(em);
控件中的
setEmail()
函数将标签的值设置为

public void setEmail(string recEmail)
{
        lblEmail.Text = recEmail;
}
但我得到了以下错误:

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

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

<%@ Register Src="~/Email.ascx" tagname="Email" TagPrefix="uc1" %>
调试时,这表明
a
正在获取
recEmail
的值,但它没有分配给
lblEmail.Text

由于我无法上传全部代码,请注意以下几点:

  • 名为Panel2的面板位于UpdatePanel中,该面板在电子邮件控件添加到面板后会有条件地更新
  • Email.ascx文件位于调用它的文件的父文件夹中。表示如果Email.ascx位于文件夹中,则调用它的文件位于A/B文件夹中。但我不认为这会起作用。刚才提到给你关于情况的完整信息

  • 请告诉我如何解决此问题?

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

    而不是像这样初始化:

    public void setEmail(string recEmail)
    {
            string a=recEmail;
            lblEmail.Text = a;
    }
    
    Email em = new Email();
    
    Email em = (Email)LoadControl("Email.ascx");
    
    看一看。您应该像这样初始化它:

    public void setEmail(string recEmail)
    {
            string a=recEmail;
            lblEmail.Text = a;
    }
    
    Email em = new Email();
    
    Email em = (Email)LoadControl("Email.ascx");
    

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

    @shivaparek:有趣的是,在链接的MSDN页面中,他们在示例中使用了
    .cs
    。我想无论哪种方式都足够好。我不知道,但这是一个错误,因为没有找到lblEmail。