.Net добавление префикса ctl00_CPHPageContents_ для управления идентификаторами

У меня есть приложение веб-форм asp.net C# в.net Framework 4 На моих страницах, когда я просматриваю html-исходник, он меняет идентификаторы элементов управления на что-то вроде ctl00_CPHPageContents_txtUserID на самом деле это txtUserID

Это приложение было первым в Framework 3.5, и идентификаторы были сгенерированы как CPHPageContents_txtUserID

Итак, короче говоря, в Framework 3.5 Id был CPHPageContents_txtUserID и теперь в Framework 4 ID есть ctl00_CPHPageContents_txtUserID что нарушает наши тесты автоматизации. Могу ли я удалить это ctl00 добавил Framework 4?

3 ответа

Решение

Нашел решение здесь http://weblogs.asp.net/scottgu/archive/2010/03/30/cleaner-html-markup-with-asp-net-4-web-forms-client-ids-vs-2010-and-net-4-0-series.aspx

Установка ClientIDMode в Predictable удаляет префикс ct100_.

Проверьте ClientIDMode вашей страницы; это была новая функция в.NET 4, которая дает вам немного больше контроля над идентификаторами, генерируемыми веб-формами. Хотя, если он добавляет ctl100_ впереди, это подразумевает, что есть новый серверный элемент управления, обертывающий CPHPageContents, которого раньше не было.

ClientIDMode - лучший подход. Если вы установите "статический", то идентификаторы для элементов управления на вашей странице будут теми, которые вы установили. Но если вы поддерживаете старый проект и по какой-либо причине вам необходимо придерживаться более старой версии фреймворка, вы можете добавить на свою страницу следующее:

<asp:HiddenField runat="server" ID="aspPrefix" />
<div id="idPrefix" style="display:none" ><%= aspPrefix.ClientID %></div>

Затем из JavaScript вы добавляете:

var hiddenFieldId = $('#idPrefix').text();
ver controlPrefix = hiddenFieldId.substr(0, hiddenFieldId.length - 9);  // 9 chars in 'aspPrefix'

С префиксом вы можете теперь получить идентификаторы для других элементов управления на вашей странице.

Другие вопросы по тегам