在我的一些用户控件中,子元素不是在页面加载时创建的

本文关键字:加载 创建 我的 用户 控件 元素 | 更新日期: 2023-09-27 18:07:27

我知道我应该明白这一点,但我想不出来。我有一个带有许多用户控件的页面——我已经创建了一组用户控件来处理页面上的数据,因为它有助于划分数据。一些用户控件运行正常,然而,其他的失败。

错误是在Page_Load中没有创建子控件,即它们被设置为null。但我想,它们应该在这个时候就被创建出来了——而且那些能起作用的控件也有看起来能起作用的子控件。这不是名字的拼写错误,因为这些页面是编译的,我没有把名字弄乱。

有没有人对这可能是为什么有任何想法或建议?我不认为张贴代码会有帮助,因为代码中没有什么特别的,但如果有人想看到任何东西,请告诉我。

这是c#,。net,网站。谢谢你! !

ETA代码:

<tr><cass:Comment id="comment" runat="server" Title="Comments"/></tr>

这是html。注释控件在其他地方工作。

comment.Value = value.Comment;

当我在Page_Load - EnsureChildControls之后尝试这个时,我得到消息:

对象引用未设置为对象的实例。-没有很多其他信息。

当我探索时,它是被设置为null的注释对象。

我应该指出,这发生在其他控件,所以它不是评论控件-这恰好是一个我修改有EnsureChildControls

在我的一些用户控件中,子元素不是在页面加载时创建的

根据您的整体设计,在某些情况下,您应该确保创建了子/子控件,例如,在许多情况下,您的复合服务器控件的属性是这样访问的:

public string Text
{
  get
  {
    EnsureChildControls();
    return label.Text;
  }
  set
  {
    EnsureChildControls();
    label.Text = value;
  }
}

请参阅此处获取完整解释:复合服务器控制示例

就像我说的,取决于实际情况和你正在使用的类,但如果没有看到你的代码,就不可能确切地知道

我通过将控件重写为服务器控件来解决这个问题-不理想,但它可以完成工作。我认为这个问题可能是由名称空间类名混淆引起的,这意味着我可能混淆了某些东西。但我没有一个明确的答案。