добавление runat = "server" изменяет поведение макета - PullRequest
6 голосов
/ 22 мая 2009

У меня есть страница с некоторыми элементами управления, пользовательскими контролями и т. Д.

когда я изменяю div с простого <div id="foo"> на <div id="foo" runat="server"> макет завершен, изменения.

почему это так и как я могу предотвратить это?

Я использую 2.0 .NET Framework

Это потому, что .NET меняет мой идентификатор, который, очевидно, мне не нужен?

Ответы [ 3 ]

13 голосов
/ 22 мая 2009

Если вы нацеливаетесь на идентификатор элемента управления div в CSS, а затем запускаете его на сервере, вы обнаружите, что он больше не применяет стиль.

Это потому, что ASP.NET имеет встроенный механизм (INamingContainer), чтобы гарантировать, что у вас нет нескольких элементов управления с одинаковыми именами. Это делается путем добавления префиксов контейнеров, так что вы получите:

<div id="ctl00_ctl00_myDivName" runat="server" />

Самый простой способ обойти это - изменить работу с идентификатором на работу с классом:

<div class="myDiv" runat="server"></div>

В качестве альтернативы, я считаю, что XHTML требует, чтобы Div имел закрывающие теги, поэтому используйте

<div runat="server">Some content</div>
0 голосов
/ 20 октября 2014

Добавить ClientMode = "static" это позволит убедиться, что ваш идентификатор не будет изменен на идентификатор клиента для вашего контроля.

0 голосов
/ 22 мая 2009

Когда вы добавляете runat = "server" в div, система автоматически генерирует для него идентификатор. Это называется идентификацией. К сожалению, я мало что могу сделать в рамках 2.0 для div, о которых я знаю (в любом случае это не проблема), но в 4.0 мы получаем переопределение ... Хотя на пользовательских элементах управления (в 2.0 ) вы можете переопределить поля ClientID и UniqueID. Поэтому, если вы создали класс MyDiv, который использовал div в качестве базы, а затем создали поля ClientID / UniqueID, у вас должно быть все в порядке.

Другой вариант - обновить CSS / javascript, чтобы использовать искаженный идентификатор. Он довольно статичен в зависимости от положения на странице, поскольку ASP.Net использует его для поиска элемента управления во время обратной передачи.

...