Является ли сопоставление имен в ASP.NET последовательным?
Когда у вас есть элемент управления ASP, как это:
<asp:TreeView ID="TreeItems" runat="server"></asp:TreeView>
HTML, который он генерирует, искажает имена. Если я хочу получить прямой доступ к идентификаторам сгенерированных элементов, я могу попытаться выяснить, к каким именам это относится, и искать этот идентификатор.
Гарантируется, что имена созданных элементов будут выполнены определенным образом в соответствии с каким-либо стандартом Microsoft? Я просто боюсь этого взлома, если они выпустят новую версию.NET, которая делает это по-другому. Есть ли способ создать имя, искажающее себя в коде?
4 ответа
Не гарантируется согласованность (это детали реализации)
Вместо этого используйте ClientID (который дает вам сгенерированный идентификатор).
Я полагаю, что с ASP.NET на.NET 4 вы можете указать, что идентификаторы будут генерироваться определенным образом.
Смотрите: http://weblogs.asp.net/asptest/archive/2009/01/06/asp-net-4-0-clientid-overview.aspx
Кроме того, если вы используете jQuery, вы можете быть уверены, что номинальный идентификатор будет в идентификаторе клиента, поэтому вы можете выбрать его с чем-то вроде:
$("input[id*='TreeItems']")
Смотрите: http://api.jquery.com/attribute-contains-selector/
Если вы хотите использовать его в сценарии на стороне клиента, вы можете сделать следующее:
<script type="text/javascript">
//initialize client names of server side controls.
var TreeItemsId = "<%= TreeItems.ClientID %>";
</script>
Когда он отдает клиенту, он будет выглядеть примерно так:
<script type="text/javascript">
//initialize client names of server side controls.
var TreeItemsId = "ctl00_TreeItems";
</script>
Нет, это не гарантируется быть последовательным.
Он должен быть согласованным, если используется одна и та же версия платформы, но обновления на сервере могут изменить это, поэтому не стоит полагаться на знание сгенерированного имени.
Использовать ClientID
свойство, чтобы узнать сгенерированный идентификатор элемента управления.