1

我正在尝试将自定义用户 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;
}

但我收到以下错误: 在此处输入图像描述

调试时,我看到它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 文件夹中。但我不认为这会产生影响。刚才提到给你有关情况的完整信息。

请告诉我该怎么做才能解决这个问题?

4

1 回答 1

3

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

而不是像这样初始化:

Email em = new Email();

看看方法_ LoadControl()您应该像这样初始化它:

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

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

于 2013-03-06T20:32:35.293 回答