Как получить доступ к управлению asp.net с помощью jquery
<asp:TextBox runat="server" ID="myTextBox" />
$('#myTextBox')
не будет работать.
Как получить доступ к управлению asp.net с помощью jquery
<asp:TextBox runat="server" ID="myTextBox" />
$('#myTextBox')
не будет работать.
<asp:TextBox runat="server" ID="myTextBox" />
Приведенный выше код aspx при визуализации на странице изменяется на
<input type="text" id="ctl00_Main_myTextBox" name="ctl00$Main$myTextBox" />
Это связано с тем, что основная и управляющая информация, в которой находится элемент управления .net, добавляется, что делает нам немного сложнее написать селектор.
У вас есть несколько вариантов. Это ни в коем случае не является всеобъемлющим, но я дам ему попробовать.
Option1:
$('#<%= myTextBox.ClientID %>')
Используйте ClientID
- рекомендуется, но meh.. не так много. Я бы постарался не писать ClientID
, если бы мог. Основная причина заключается в том, что вы можете использовать его только в .aspx
страницах, а не в внешних файлах .js
.
Option2:
$('[id$=myTextBox]') // id which ends with the text 'myTextBox'
$('[id*=myTextBox]') // id which contains the text 'myTextBox'
Использование селекторов атрибутов - рекомендуется также, выглядит немного уродливым, но эффективным.
Я видел здесь несколько вопросов, беспокоясь о производительности с этими селекторами. Это лучший способ? Нет.
Но большую часть времени вы даже не заметите удар производительности, если, конечно, ваше дерево DOM не будет огромным.
Вариант3:
Использование CssClass
- настоятельно рекомендуется. Поскольку селекторы, использующие классы, являются чистыми и несложными.
В случае, если вам интересно, CssClass
для .net-элементов управления те же, что и class
для традиционных элементов управления html.
<asp:TextBox runat="server" ID="myTextBox" CssClass="myclass" /> //add CssClass
$('.myclass') //selector
ОПЦИЯ4:
Используйте ClientIDMode="Static"
, который был введен в .NET Framework 4.0 на элементе управления, чтобы он не изменился. - рекомендуется также.
<asp:TextBox runat="server" ID="myTextBox" ClientIDMode="Static" /> //add ClientIDMode
$('#myTextBox') //use the normal ID selector
Примечание:
По моему опыту, я видел уродливые селектора, такие как $('#ctl00_Main_myTextBox')
. Это результат непосредственного копирования вставки идентификатора, полученного с страницы, и использования его в script. Послушай, это сработает. Но подумайте о том, что произойдет, если изменится идентификатор управления или мастер-идентификатор. Очевидно, вам придется пересмотреть эти идентификаторы и изменить их снова. Вместо этого используйте один из вышеперечисленных вариантов и получите доступ к ним.
В дополнение к ответу krishna вы можете использовать атрибут name вместо этого, когда он отображается в HTML по IIS, присвоенное значение атрибута имени должно быть таким же, как значение ID:
Пример
<asp:TextBox ID="txtSalesInvoiceDate" runat="server" />
var invDate = $("input[name=txtSalesInvoiceDate]");
В дополнение к ответу @krishna вы можете управлять формированием идентификатора клиента веб-управления на уровне страницы, а также уровнем веб-сайта, используя ClientIDMode="Static"
В ASP.NET 4.0.
На уровне страницы, как показано ниже:
<%@ Page Title="" Language="C#" MasterPageFile="~/Members/Site.Master" AutoEventWireup="true" CodeBehind="Calculator.aspx.cs"
Inherits="store.Members.Calculator"
ClientIDMode="Static"
%>
На уровне веб-сайта
Вы можете использовать настройки web.config, как показано ниже.
<system.web>
<pages ClientIDMode="Static">
</pages>
...
</system.web>