Пользовательский элемент управления, встроенный в страницу, изменяет ClientID элементов управления.
У меня есть пользовательский элемент управления (.ascx), который я встраиваю в свою страницу (.aspx), как показано ниже:
<%@ Register TagName="UI" TagPrefix="my" Src="~/userControls/UI.ascx" %>
<my:UI runat="server" ID="mytestui" />
Когда страница загружается, элементы управления (текстовые поля, выпадающие списки и т. Д.) Внутри пользовательского элемента управления изменяются автоматически. Скажем, у меня есть текстовое поле с именем txtTest, оно меняется на mytestui_txtTest.
Как вы можете видеть, он берет вышеуказанный идентификатор пользовательского элемента управления и добавляет его к элементу управления.
Есть ли способ предотвратить это?
2 ответа
Это происходит потому, что ваш контроль является подклассом UserControl
класс, который реализует INamingContainer
интерфейс. По умолчанию все элементы управления, которые реализуют этот интерфейс, дополняют идентификаторы детей своими собственными идентификаторами, таким образом гарантируя, что каждый идентификатор на странице уникален.
Чтобы избежать этого, у вас есть два варианта:
Создать серверный элемент управления, наследуя не от
UserControl
но изControl
класс прямо. Этот не реализуетINamingContainer
, Однако у вас не будет файла разметки, и вам придется генерировать все элементы управления программно.[Редактировать: только ASP.NET 4] Использовать
ClientIDMode="Static"
для дочерних элементов управления. Этот режим гарантирует, что идентификаторы сервера и клиента элемента управления точно совпадают. В этом случае разработчик должен убедиться, что этот элемент управления используется только один раз на странице, чтобы избежать дублирования идентификаторов.
Какую версию.Net вы используете? Если>= 4.0, вы можете использовать ClientIDMode="Static"
как сказал Андрей. Вы можете установить его на уровне управления или страницы.