Есть ли способ сохранить идентификатор, который я установил для элемента управления asp .net при выводе в HTML? - PullRequest
6 голосов
/ 02 октября 2010

Когда я создаю форму, я пытаюсь сделать доступность главным приоритетом, но вывод asp .NET отрицает некоторые из них.Например, когда я устанавливаю тег метки для входного тега, я создаю его следующим образом:

<label for="frmFirstName">First Name<span class="required">*</span></label>
<asp:TextBox id="frmFirstName" CssClass="textbox" runat="server" />

Но, когда HTML выводится со страницы, он выводится как:

<label for="frmFirstName">First Name<span class="required">*</span></label>
<input name="ctl00$phMainContent$frmFirstName" type="text" id="ctl00_phMainContent_frmFirstName" class="textbox" />

Это проблема, так как теперь метка больше не привязана к элементу ввода.Есть ли способ заставить .NET вывести точный идентификатор, который я установил для поля ввода?Мне не нужно было использовать Javascript, чтобы исправить что-то вроде этого.

Ответы [ 4 ]

9 голосов
/ 02 октября 2010

Если вы используете ASP.Net 4, вы можете установить атрибут ClientIDMode элемента управления на static. Это позволит сохранить значение тега ID при визуализации.

5 голосов
/ 02 октября 2010

Используйте элемент asp:Label и укажите его свойство AssociatedControlId в текстовом поле.

<asp:Label ID="lblFirstName" runat="server" AssociatedControlId="frmFirstName">First Name<span class="required">*</span></asp:Label>
<asp:TextBox id="frmFirstName" CssClass="textbox" runat="server" />

Это должно вывести правильный HTML для вас.

3 голосов
/ 02 октября 2010

В дополнение к решениям AssociatedControlId и <% = control.ClientId%>, если ваш элемент управления (в данном случае «frmFirstName») гарантированно является единственным элементом управления с этим идентификатором на странице, вы можете установить Свойство ClientIDMode элемента управления равно «Статический», что будет означать, что ASP.NET не изменяет идентификатор в отображаемом HTML.

Например:

<label for="frmFirstName" runat="server" ID="lblFirstName">First Name</label>
<asp:TextBox runat="server" ID="frmFirstName" ClientIDMode="Static" />

будет отображаться как

<label for="frmFirstName" id="some$aspnet$id$lblFirstName">First Name</label>
<input type="text" id="frmFirstName" />

Это также облегчит задачу, если вам понадобится сослаться на нее из Javascript, поскольку может быть затруднительно отображать автоматические идентификаторы ASP.NET в Javascript (насколько я знаю, это невозможно сделать в отдельном случае). Файл .js, вам нужно встроить JS на страницу и использовать <% = control.ClientID%>).

Подробнее о ClientIDMode можно узнать здесь: http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode.aspx

3 голосов
/ 02 октября 2010

Вы можете использовать свойство ClientId.Это то, что будет выводиться в качестве идентификатора элемента управления в HTML, и то, что вы можете использовать на стороне клиента для ссылки на визуализированный элемент:

<label for="<%:frmFirstName.ClientId%>">First Name<span class="required">*</span></label>
<asp:TextBox id="frmFirstName" CssClass="textbox" runat="server" /

Примечание:

<%:%> является новым для ASP.NET 4.0 - вам нужно будет использовать <%=%>, если в .NET 3.5 и ранее.

Редактировать:

Просто добавьте, что ClientId - это путь при обращении к элементу управления изJavascript.

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