2012-05-29 3 views
1

Ive заметил, что если я добавлю TextBox на страницу, не присваивая ему свойство ID, тогда это свойство автоматически генерируется в соответствии с иерархией управления этой отображаемой страницы.Autogenerating control ids в ASP.NET

Я создаю настраиваемый элемент управления, который должен использоваться несколько раз на одной странице (так что hardcoding ID не будет работать).

Имеет ли ASP.NET метод, который я могу использовать для создания «уникального» идентификатора для каждого из этих элементов управления?

+0

Итак, вы сказали, что если вы не будете жестко кодировать его, ASP.NET будет генерировать его. Почему вы хотите вызвать метод? –

+0

Вы получаете какой-либо базовый класс управления? – Gabe

+0

вы можете объяснить, почему он не будет работать, если он используется несколько раз? зависит от вашего 'ClientIDMode', несколько мест размещения вашего элемента управления могут по-прежнему иметь разные уникальные идентификаторы. –

ответ

2

У вас есть свой ответ на свой вопрос - не указывайте его и он будет создан для вас.

Интересным может быть this post on Scott Guthrie's blog, который описывает 'новый' ClientIdMode доступны в ASP.NET 4:

  • AutoID -Renders выход как в .NET 3.5 (автоматически сгенерированные идентификаторы, которые будут до сих пор делают префиксы как ctrl00 для совместимости)
  • Предсказуемости (по умолчанию) - отсекает любую «ctl00» строку идентификатора, и если в списке/управление контейнером сцепляет ребенок удостоверение личность (например: ид =»ParentControl _ChildControl»)
  • Статический -Hands над полным ID присвоения имен управления разработчику - все, что они устанавливают как идентификатор управления является то, что оказывается (пример: идентификатор =» JustMyId»)
  • Наследование - Сообщает управление отложить до режима поведения именования родительского контейнера управления
+0

«не указывайте один, и он будет создан для вас». Где/что это такое и как я могу получить к нему доступ? – maxp

+0

@maxp - Я имею в виду ClientId. Обычно это отображается и указывается в разметке элемента управления (''), а не только для чтения в самом элементе управления. – Widor

0

вы можете переопределить ClientID или UniqueID, если вы хотите. но лучше использовать ClientIDMode.

public override string UniqueID 
{ 
    get 
    { 
     return "newid"; 
    } 
} 

public override string ClientID 
{ 
    get 

    { 
     return "newid"; 
    } 
}