почему я не вижу сгенерированных идентификаторов для серверных элементов управления?
Теперь я немного запутался. Позвольте мне объяснить:
Я видел, как люди говорили о добавлении кнопки или другого элемента управления на страницу в asp.net (3.5) и когда элемент управления отображает его, изменяется идентификатор этого элемента управления, например. Button1 становится Button1_somethingsomething, что мешает им использовать jQuery, и в конечном итоге они используют что-то вроде <%controlId.ClientId %>
Поэтому я сделал небольшой тест
1. I added a button on the page:
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="Button" />
<div>
2. Then I added a JavaScript and jQuery:
<script type="text/javascript">
$(document).ready(function() {
$("#Button1").click(function() {
alert("Hello world!");
});
});
</script>
3. The generated html is this:
<div>
<input type="submit" name="Button1" value="Button" id="Button1" />
<div>
Теперь я не понимаю ASP.NET (asp.net 3.5) изменение идентификаторов. Почему я вижу по-другому поведение?
Кстати. Это работает, когда я нажимаю на кнопку!
Спасибо.
4 ответа:
Возможно, Вам не всегда нужно использовать YourControl.ClientID, но это хорошая практика, так что если и когда Ваш контроль окажется внутри контейнера, вам не придется возвращаться и исправлять его.
ASP.NET не изменяет имена идентификаторов по умолчанию, но изменяет их, когда они используются в ContentPlaceHolder главной страницы. Таким образом, имена заканчиваются чем-то вроде ctl00_ContentPlaceHolderContent_button1. В вашем случае нет главной страницы и никаких изменений не производится.
Это связано с интерфейсом INamingContainer, который реализуют некоторые элементы управления (такие как asp:content control, используемый с главными страницами).
Из MSDN:
Любой элемент управления, реализующий это интерфейс создает новое пространство имен в какие все атрибуты идентификатора дочернего элемента управления гарантированно уникальны в пределах целое приложение. Маркер предусмотренный этим интерфейсом позволяет уникальное именование объекта динамически созданные экземпляры серверного управления в Веб-сервер контролирует это поддержка привязки данных. Эти меры контроля включите ретранслятор, DataGrid, DataList, CheckBoxList, ChangePassword, LoginView, Меню, SiteMapNodeItem, и radiobuttonlist с контроли.
Ваш пример кода не использует ни один из этих элементов управления. Вы не используете главную страницу с заполнителем ContentPlaceHolder. Ваши идентификаторы не изменяются из-за этого.