.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'
С префиксом вы можете теперь получить идентификаторы для других элементов управления на вашей странице.