Необходимость вызова .ClientID, чтобы получить .ID для заполнения веб-элемента управления.

StackOverflow https://stackoverflow.com/questions/1203397

  •  05-07-2019
  •  | 
  •  

Вопрос

Я создаю структуру форм для проекта и обнаружил, что при попытке программно установить AssociatedControlID свойства asp:Label к связанному с ним TextBox, мне нужно вызвать ID клиента получить ИДЕНТИФИКАТОР для заполнения (не быть нулевым).

Во время отладки такое использование промежуточного окна показывает проблему:

_inputTextBox.ID
null
_inputTextBox.ClientID
"ctl00_MainContent_ctl01"
_inputTextBox.ID
"ctl01"

(Значение присутствует во второй раз ИДЕНТИФИКАТОР называется)

я устанавливаю _inputLabel.AssociatedControlID = _inputTextBox.ID в переопределенном СоздатьЧилдКонтроль(), и попробовали в РендерСодержимое() моего WebControl.

Я пробовал загрузить ID клиента сначала в неиспользуемую временную переменную, и это работает, например:

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"/>

Мой вопрос: зачем мне этот взлом?Есть ли лучший способ для ИДЕНТИФИКАТОР быть надежно заселенным?

Спасибо.

Это было полезно?

Решение

Лучше всего установить идентификатор элемента управления самостоятельно.Если вы этого не сделаете, он будет создан автоматически, когда элементы управления защищены. EnsureID метод называется.
Этот метод автоматически вызывается в разное время, включая, помимо прочего, когда геттер для ClientID доступен.
Вы также должны знать, что если вы динамически манипулируете элементами управления, возможно, что динамически генерируемые идентификаторы могут различаться в зависимости от порядка добавления элементов управления на страницу.
Кроме того, даже если вы не создаете элементы управления динамически, динамически генерируемый идентификатор может измениться, если вы принудительно создадите идентификатор (путем доступа ClientID) в другом порядке.

Другие советы

Идентификатор динамически создаваемых элементов управления имеет значение null, если он явно не определен до вызова метода RenderControl.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top