我有一个复合控件,它将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'.
好吧有点背景.我得到了这个主复合控件,它动态地向控件集合添加了许多"元素".其中一个元素恰好是这个'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;
希望这可以帮助.