Acesso Asp.net controlos com o jquery (todas as opções)

Como aceder asp.net controlo com jquery

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

$('#myTextBox') não funcionaria.

Author: Krishna, 2013-11-26

3 answers

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

O código aspx acima, quando representado numa página, muda para

<input type="text" id="ctl00_Main_myTextBox" name="ctl00$Main$myTextBox" />

Isto é porque a informação principal e de controlo em que o controlo.net reside é preparada, o que torna um pouco complicado para nós escrever um selector.

Tens algumas opções. Isto não é de modo algum abrangente, mas vou tentar.

Opção 1:

$('#<%= myTextBox.ClientID %>')

Utilize o ClientID - recomendado mas meh.. nem por isso. Eu tentaria evitar escrever se pudesse. A principal razão é que você só pode usá-lo em .aspx páginas e não em arquivos externos .js.

Option2:

$('[id$=myTextBox]') // id which ends with the text 'myTextBox'

$('[id*=myTextBox]') // id which contains the text 'myTextBox'

Usar selectores de atributos - também recomendado, parece um pouco feio, mas eficaz.

Vi algumas perguntas aqui, preocupando-me com o desempenho com estes selectores. Esta é a melhor maneira possível?Não. Mas, na maioria das vezes ... nem vai notar a performance, a não ser, claro, que a tua árvore DOM seja enorme.

Opção 3:

Usando CssClass - altamente recomendado. Porque os selectores que usam classes são limpos e simples.

No caso de estar a pensar, CssClass para os controlos do.NET é o mesmo que class para os controlos html tradicionais.

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

$('.myclass') //selector

Opção 4:

Utilizar ClientIDMode="Static", que foi introduzido no. NET Framework 4.0, no controlo para que a sua IDENTIFICAÇÃO permanecerá inalterada. - recomendado também.

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

$('#myTextBox') //use the normal ID selector

Nota: Pela minha experiência, vi selectores feios como $('#ctl00_Main_myTextBox'). Este é o resultado da cópia direta colando o ID renderizado da página e usá-lo no script. Isto vai funcionar. Mas pense no que acontecerá se o ID de controle ou o ID mestre mudarem. Obviamente, terá de rever estas identificações e mudá-las de novo. Em vez disso, use uma das opções acima e seja coberto.

 81
Author: Krishna, 2013-11-27 14:38:21

Para além da resposta por krishna , poderá usar o atributo name em vez disso, quando for representado em HTML por IIS, o valor do atributo name atribuído deverá ser o mesmo que o valor ID:

Exemplo

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

var invDate = $("input[name=txtSalesInvoiceDate]");
 1
Author: Ashraf Abusada, 2017-07-17 15:22:50

Além da resposta de @krishna, você pode controlar a geração de ID de cliente de controle web a nível de página, bem como a nível de site web usando ClientIDMode="Static" em ASP.NET 4.0.

Ao nível da página, como mostrado abaixo :

<%@ Page Title="" Language="C#" MasterPageFile="~/Members/Site.Master" AutoEventWireup="true" CodeBehind="Calculator.aspx.cs" 
Inherits="store.Members.Calculator" 
ClientIDMode="Static"
%>

A nível do sítio web

Pode usar a web.configuração da configuração como mostrado abaixo

 <system.web>
    <pages ClientIDMode="Static">
    </pages>

   ...
 </system.web>
 0
Author: M.Hassan, 2017-11-07 23:05:44