Веб-формы и jQuery, как сопоставить идентификаторы?

Я хочу использовать jQuery с веб-страницами asp.net. Нужно ли мне приобретать специальный набор инструментов, чтобы элементы управления .net выдавали дружественные идентификаторы элементов управления?

Причина в том, что я не хочу писать javascript со ссылкой на мой html-идентификатор, например control_123_asdfcontrol_234.

Это исправлено в версии 3.5? (Я помню, как читал, что вам нужно получить какую-то специальную dll, которая делает идентификатор дружественным).


person Blankman    schedule 04.11.2008    source источник


Ответы (7)


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

Но если у вас есть это на вашей странице .aspx:

<asp:TextBox ID="txtExample" runat="server" />

Тогда ваш jQuery может легко найти этот элемент управления, даже если он искажен рендерингом главной страницы, например:

$("[id$=txtExample]")

Оператор $= соответствует концу строки, а искажение имени всегда находится впереди. Как только вы это сделаете, вы можете получить фактический искаженный идентификатор следующим образом:

$("[id$=txtExample]").attr("id")

а затем проанализируйте это так, как считаете нужным.

РЕДАКТИРОВАТЬ: это простой способ, но он может быть более производительным, чем просто дать каждому элементу управления класс, такой же, как его старый идентификатор.

См. эту статью, ссылку на которую Джефф разместил по другому вопросу оптимизации jQuery:

jQuery: анализ производительности селекторов

person CMPalmer    schedule 05.12.2008
comment
Если вы используете WebForms для начала, скорее всего, вы не слишком заботитесь о таких вещах, как производительность. - person nathanchere; 14.02.2014

Вы можете использовать myControlId = "<%= myControl.ClientID %>"; для вывода (недружественного) идентификатора, используемого для ссылки на него в Javascript.

person kͩeͣmͮpͥ ͩ    schedule 04.11.2008
comment
это если javascript встроен в мою страницу .aspx, но мой будет отдельным файлом .js, который не будет анализироваться. - person Blankman; 04.11.2008
comment
как насчет var controlId = ‹%= myControl.ClientID %› тогда? - person kͩeͣmͮpͥ ͩ; 04.11.2008

Есть много способов выбрать элементы с помощью jQuery. Вы можете сделать тщательный выбор Tag/ClassName для одного.
Я не знаю, как можно возиться с самим идентификатором до ASP.NET 4.0. Конечно, вы всегда можете попробовать ASP.NET MVC Framework.

person Jeff Sheldon    schedule 04.11.2008

Хотя я не слышал об этой новой «специальной dll», о которой вы говорите, одним простым способом было бы использовать

var myControlId; 

В вашем отдельном js-файле, а затем назначьте идентификатор клиента этой переменной в файле aspx/ascx.

Я тоже ненавижу идентификатор сервера: s... ASP.NET MVC - это решение всех вещей, которые меня раздражают в веб-формах asp.net (Viewstate... и т.д. и т.д.).

person ullmark    schedule 04.11.2008

Вы можете прикрепить уникальный атрибут к своим элементам управления (я не уверен, что вы можете сделать это без расширения базовых веб-элементов управления; быстрый поиск показал только это), а затем используйте селектор "element[attribute:value]".

person Community    schedule 04.11.2008

Вы также можете переопределить свойства UniqueName и/или ClientID элементов управления в расширяющемся классе и вернуть фактический идентификатор.

MyTextBox : Web.UI.TextBox
{
    // This modifies the generated 'name' attribute
    override UniqueID { get { return ID; } }

    // This modifies the generated 'id' attribute
    override ClientID { get{ return ID; } }
}
person Serhat Ozgel    schedule 04.11.2008

Попробуйте $get('myId'). Я думаю, что это способ выбрать элемент в документах, отличных от HTML.

person Naresh Kumar    schedule 04.09.2017