Проблема генерации идентификатора ASP.NET Dynamic UserControl - PullRequest
3 голосов
/ 07 апреля 2009

У меня проблема со свойством ID динамически загружаемых пользовательских контроллеров, изменяющихся в течение жизненного цикла страницы. Более конкретно, свойство ID изменяется, когда система вызывает Page.Form.RenderControl (htmlTextWriter); До того, как он вызван, элемент управления имеет идентификатор "ctl84", но после вызова он имеет идентификатор "ctl99".

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

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

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

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

Ответы [ 4 ]

1 голос
/ 07 апреля 2009

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

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

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

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

0 голосов
/ 07 апреля 2009

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

0 голосов
/ 07 апреля 2009

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

Button btnSave = new Button ();

btnSave.ID = "btnSave";

string clientID = btnSave.ClientID;

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

0 голосов
/ 07 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...