C# 设置自定义用户web控件的标签文本时出现NullReferenceException
我正在尝试将自定义用户web控件的标签文本设置为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; } 但
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
由于我无法上传全部代码,请注意以下几点:
请告诉我如何解决此问题?默认情况下,用户控件的成员在初始化之前为空。并且初始化不会发生在用户控件(和页面,可能还有其他类似类型)的构造函数中。当控件“加载”到某种上下文中时,就会发生这种情况 而不是像这样初始化:
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。