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-документах.