我有一个复合控件,将一个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;
希望这可以帮助。