在标签上设置AssociatedControlID失败

Per*_*eck 3 asp.net composite-controls

我有一个复合控件,它将TextBox和Label控件添加到其Controls集合中.当我尝试将Label的AssociatedControlID设置为Textbox的ClientID时,我收到此错误

Unable to find control with id 
'ctl00_MainContentPlaceholder_MatrixSetControl_mec50_tb'
that is associated with the Label 'lb'. 
Run Code Online (Sandbox Code Playgroud)

好吧有点背景.我得到了这个主复合控件,它动态地向控件集合添加了许多"元素".其中一个元素恰好是这个'MatrixTextBox',它是由TextBox和Label组成的控件.

我将Label和TextBox保存为受保护的类变量,并在CreateChildControls中初始化它们:

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

    ElementLabel = new Label();
    ElementLabel.ID = "lb";
    Controls.Add(ElementLabel);
Run Code Online (Sandbox Code Playgroud)

我试过设置

ElementLabel.AssociatedControlID = ElementTextBox.ClientID;
Run Code Online (Sandbox Code Playgroud)

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

spl*_*tne 7

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

所以它应该是:

ElementLabel.AssociatedControlID = ElementTextBox.ID;
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.