我正在为一个项目制作一个表单框架,并发现当尝试以编程方式将 asp:Label 的AssociatedControlID属性设置为其关联的 TextBox 时,我必须调用ClientID来获取要填充的ID(不为空)。
在调试时,中间窗口的这种使用显示了问题:
_inputTextBox.ID
null
_inputTextBox.ClientID
"ctl00_MainContent_ctl01"
_inputTextBox.ID
"ctl01"
(第二次调用ID时存在值)
我在重写的CreateChildControls()中设置_inputLabel.AssociatedControlID = _inputTextBox.ID ,并在我的 WebControl的RenderContents()中进行了尝试。
我尝试先将ClientID加载到一个未使用的临时变量中,它可以工作,例如:
var x = _inputTextBox.ClientID;
_inputLabel.AssociatedControlID = _inputTextBox.ID;
给出:(正确)
<label for="ctl00_MainContent_ctl01">Name of customer</label>
<input type="text" id="ctl00_MainContent_ctl01" name="ctl00$MainContent$ctl01"/>
而不是:(不正确)
<span>Name of customer</span>
<input type="text" id="ctl00_MainContent_ctl01" name="ctl00$MainContent$ctl01"/>
我的问题是 - 为什么我必须执行这个 hack?是否有更好的方法可以可靠地填充ID ?
谢谢。