2011-01-03 1 views
0

Я просматриваю код какого-либо кода на докторе XHTML и из того, что я вижу, является ASP.net. Идентификаторы в HTML имеют там «$».

Например:

<img id="$ct100templateContent$SectionPanel1$ctl01$ctl02ctl00_templateContent_SectionPanel1_ctl01_ct999img" src="this.jpg"/> 

С W3C семантической точки зрения «$» не является действительным в ID или класса. Идентификаторы и классы могут содержать только буквенно-цифровые символы в типе XHTML.

Является ли «$» соглашением об именовании ASP.net ссылкой на элемент веб-элемента управления или шаблона?

+2

Идите на фигуру, MS будет по всем стандартам. –

ответ

1

Я немного смущен как/почему вы видите знаки доллара в ID.

При визуализации веб-элемент управления в разметке, ASP.NET создает атрибуты элемента id и name на основе веб-элемента управления ID собственности и ее место в иерархии управления. Короче говоря, некоторые элементы управления, такие как шаблонные элементы управления или повторяющиеся элементы управления, действуют как именованные контейнеры. Значения свойств такого элемента управления «ID» присваиваются значениям их внутренних элементов управления значениям ID при определении атрибутов id и name.

В качестве примера рассмотрим следующую иерархию управления:

Sample ASP.NET control hierarchy.

Здесь главная страница (ctl00) и ContentPlaceHolder (MainContent) элементы управления именования контейнеров. Управление веб-элементом TextBox Age будет отображено id из clt00_MainContent_Age - namely, its own server-side ID property value prefixed with the Значения идентификатора его предков-именованных контейнеров.

Отметьте, как рендеринг id разделяет каждое пятно контейнера имен с подчеркиванием. Это функциональность по умолчанию в ASP.NET, поэтому я недоумеваю, почему вы видите знаки доллара в атрибуте id. (При формулировании атрибута name, ASP.NET разделяет каждое пятно контейнера именования значком доллара, но при формулировании значения атрибута id он не должен использовать.)

Какую версию ASP.NET вы используете? Ты что-то делаешь ... странно? Как использование пользовательских элементов управления и переопределение базы Control class's IdSeparator property? Если вы используете ASP.NET 4, устанавливаете ли вы (намеренно или непреднамеренно) свойство управления ClientIDMode?

+0

Я не уверен, какую версию ASP.NET они используют. Из вашего объяснения о том, как формируются идентификаторы, я думаю, что разработчик ASP.NET допустил ошибку при создании кода переднего конца. – ectype

0

Значение $ означает уровень, на который элемент управления встроен в ваш сайт/страницу. Вы также можете изменить ClientIDMode на Static, чтобы использовать свои собственные идентификаторы.

0

Да, ASP.NET использует символ $, когда он генерирует идентификаторы элементов управления, основанные на иерархическом макете страницы. ASP.NET не использует символ «$» в именах классов.