Веб-формы и JQuery, как сопоставить идентификаторы? - PullRequest
11 голосов
/ 04 ноября 2008

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

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

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

Ответы [ 7 ]

15 голосов
/ 05 декабря 2008

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

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

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

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

$("[id$=txtExample]")

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

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

и затем разбирайте это, в любом случае, вы считаете нужным.

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

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

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

10 голосов
/ 04 ноября 2008

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

3 голосов
/ 04 ноября 2008

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

1 голос
/ 04 ноября 2008

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

var myControlId; 

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

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

0 голосов
/ 04 сентября 2017

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

0 голосов
/ 04 ноября 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; } }
}
0 голосов
/ 04 ноября 2008

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

...