Webforms и jQuery, как совместить идентификаторы?

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

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

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

Ответ 1

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

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

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

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

$("[id$=txtExample]")

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

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

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

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

var myControlId; 

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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