Подтвердить что ты не робот

Доступ к элементам управления Asp.net с использованием jquery (все параметры)

Как получить доступ к управлению asp.net с помощью jquery

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

$('#myTextBox') не будет работать.

4b9b3361

Ответ 1

<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. Послушай, это сработает. Но подумайте о том, что произойдет, если изменится идентификатор управления или мастер-идентификатор. Очевидно, вам придется пересмотреть эти идентификаторы и изменить их снова. Вместо этого используйте один из вышеперечисленных вариантов и получите доступ к ним.

Ответ 2

В дополнение к ответу krishna вы можете использовать атрибут name вместо этого, когда он отображается в HTML по IIS, присвоенное значение атрибута имени должно быть таким же, как значение ID:

Пример

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

var invDate = $("input[name=txtSalesInvoiceDate]");

Ответ 3

В дополнение к ответу @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>