Я делаю фреймворк форм для проекта и обнаружил, что при попытке программно установить свойство AssociatedControlID атрибута asp: Label для связанного с ним TextBox, я должен вызвать ClientID чтобы получить ID для заполнения (не быть нулевым).
Во время отладки это использование промежуточного окна показывает проблему:
_inputTextBox.ID
null
_inputTextBox.ClientID
"ctl00_MainContent_ctl01"
_inputTextBox.ID
"ctl01"
(значение присутствует во второй раз ID вызывается)
Я устанавливаю _inputLabel.AssociatedControlID = _inputTextBox.ID в переопределенном CreateChildControls () и пробовал в RenderContents () моего WebControl.
Я попытался загрузить 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"/>
У меня вопрос - зачем мне этот хак? Есть ли лучший способ для надежного заполнения ID ?
Спасибо.