我有一个复合控件,将一个TextBox和Label控件添加到其Controls集合。当我尝试将标签的AssociatedControlID设置为文本框的ClientID时,出现此错误

Unable to find control with id
'ctl00_MainContentPlaceholder_MatrixSetControl_mec50_tb'
that is associated with the Label 'lb'.


好的,那么一点背景。我得到了这个主要的复合控件,该控件动态地向其控件集合中添加了许多“元素”。这些元素之一恰好是此“ MatrixTextBox”,它是由TextBox和Label组成的控件。

我将Label和TextBox保留为受保护的类变量,并在CreateChildControls中对其进行初始化:

    ElementTextBox = new TextBox();
    ElementTextBox.ID = "tb";
    Controls.Add(ElementTextBox);

    ElementLabel = new Label();
    ElementLabel.ID = "lb";
    Controls.Add(ElementLabel);


我尝试设置

ElementLabel.AssociatedControlID = ElementTextBox.ClientID;


都在将控件添加到Controls集合之后,甚至在PreRender中都实现了-都产生相同的错误。我究竟做错了什么?

最佳答案

我认为您不能使用ElementTextBox的ClientID属性,而应该使用ID。 ClientID是您必须在Javascript中使用的页面唯一ID,例如在document.getElementyById中,并且与服务器端ID不同-特别是如果您在控件等中具有母版页和/或控件。

所以应该是:

ElementLabel.AssociatedControlID = ElementTextBox.ID;


希望这可以帮助。

10-07 21:32