2009-04-07 3 views
3

У меня возникла проблема с изменением свойства идентификатора динамически загружаемых UserControls во время жизненного цикла страницы. В частности, свойство ID изменяется, когда система вызывает Page.Form.RenderControl (htmlTextWriter); Перед тем, как он называется, элемент управления имеет идентификатор «ctl84», но после вызова он имеет идентификатор «ctl99».Проблема генерации динамического UserControl ASP.NET

Выход из htmlTextWriter содержит исходный идентификатор, однако проверка свойства ID элемента управления в отладчике VS 2008 показывает, что он изменился.

Приложение работает в среде MCMS 2002 (Microsoft CMS 2002) с использованием .NET 2.0, преобразованного из 1.1 и xhtmlConformance = «Наследие» не включено.

Мне нужен идентификатор, который будет постоянным на протяжении всего жизненного цикла страницы.

Редактировать: настройка свойства ID вручную не является вариантом.

ответ

1

Вы явно назначаете идентификатор элемента управления из кода?

Если вы являетесь удостоверением личности, вы должны оставаться на прежнем уровне.

Это не объясняет, почему это меняется, хотя, я думаю, это ... это не тот же контроль. Скорее всего, по какой-то причине вы контролируете процедуру генерации, которая работает дважды или smt.

Положите точку останова, где элемент управления обозначен, и посмотрите, попадает ли он дважды - Если это так, вы идете, это ваша проблема.

+0

Я не указав идентификатор элемента управления, Я намеренно оставляю его на ASP.NET для назначения идентификаторов. – jamaicahest

+0

есть ли причина, почему вы это делаете? поставьте точку останова, где элемент управления genretated, и посмотрите, если он попадает дважды - если это так, то ваша проблема – JohnIdol

+0

Да, это потому, что они загружаются из системы MCMS, где вы можете в основном добавить кучу элементов управления на виртуальную страницу в редакторе и дайте системе понять, как это сделать. – jamaicahest

0

Чтобы убедиться, что это тот же экземпляр элемента управления, а не другой, проверьте метод GetHashCode() элемента управления.

+0

GetHashCode() возвращает тот же номер до и после Page.Form.RenderControl() – jamaicahest

0

Когда вы включаете элемент управления asp.net, во время выполнения сгенерированный идентификатор изменяется. Вы не можете предсказать точный идентификатор клиента, который сгенерирован. Вы можете использовать свойство ClienID, предоставляемое пользовательским элементом управления.

Button btnSave = new Button();

btnSave.ID = "btnSave";

строка clientID = btnSave.ClientID;

Если вы проверите cientID, это будет что-то вроде «ctl88_99 _ *** _ btnSave».

+0

Идентификатор ClientID также меняется, проблема заключается в том, что ID изменяет _during_ Page life cycle. Не на перезагрузке или перезагрузке страницы. – jamaicahest

+0

postback является частью жизненного цикла страницы – JohnIdol

+0

Я согласен с изменением идентификатора клиента. Использование идентификатора клиента заключается в использовании этого для выполнения операций, чем идентификатор жесткого кодированного клиента. Наверное, вы пытаетесь получить доступ к элементу управления с клиентской стороны. в этом случае используйте скрытую переменную в конце страницы и установите значение clientid asp control. – rAm

0

Да я думаю, что Ram правильно .. в моем предыдущем опыте .. Я заметил, что значение явно идентификатор работает все время и будет рекомендовать тот же .. Энди