Принимаете ли вы во внимание, что ASP.NET изменяет фактический идентификатор всех элементов управления "Сервер", когда генерирует HTML, отправленный в браузер? Я предполагаю, что вы говорите о постбэке на всю страницу, а не о постбэке на Ajax - надеюсь, вы найдете это полезным.
<asp:TextBox id="txtTestBox" name="txtTestBox" runat="server">
Test Value</asp:TextBox>
превращается в (в качестве примера я показываю значения id / name, вам придется взглянуть на источник HTML, чтобы увидеть, какое значение генерирует ASP.NET):
<input type="text" id="ctl00_PlaceHolder1_txtTextBox"
name="ctl00$PlaceHolder1$txtTestBox" value="Test Value" />
Существует фрагмент кода jQuery, помогающий выбрать элементы управления ASP.NET:
function $$(id, context) {
var el = $("#" + id, context);
if (el.length < 1)
el = $("[id$=_" + id + "]", context);
return el;
}
Вы бы использовали это так:
var testValue = $$('txtTestBox').val();
Этот небольшой javascript будет искать в элементах DOM, чтобы найти элемент управления, заканчивающийся на «txtTestBox», который должен помочь вам получить элемент ASP.NET по имени, которое вы дали ему при определении элемента в файле aspx. Имейте в виду, что это не так производительно, как $ ('# whatId'), но идентификаторы, сгенерированные ASP.NET, не обязательно останутся прежними (т. Е. Если вы измените имя заполнителя, области содержимого, содержимого главной страницы - это может изменить идентификатор элемента управления).
Как примечание, ASP.NET 4.0 будет иметь дополнительные свойства на серверных элементах управления, которые позволяют вам определять фактический идентификатор элемента HTML вместо ASP.NET, решая, как вызвать элемент управления.