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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
12
0
9 093
7

Ответы 7

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

это если javascript встроен в мою страницу .aspx, но мой будет отдельным файлом .js, который не будет анализироваться.

Blankman 04.11.2008 16:19

как насчет var controlId = "<% = myControl.ClientID%>" тогда?

kͩeͣmͮpͥ ͩ 04.11.2008 17:16

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

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

var myControlId; 

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

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

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

Вы также можете переопределить свойства 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; } }
}

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

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

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

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

$("[id$=txtExample]")

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

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

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

Обновлено: Это простой способ, но он может быть большим ударом по производительности, чем просто присвоение каждому элементу управления такого же класса, как и его старый идентификатор.

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

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

Если вы для начала используете WebForms, скорее всего, вы все равно не слишком заботитесь о таких вещах, как производительность.

nathanchere 14.02.2014 07:05

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

Другие вопросы по теме