Acesso Asp.net controlos com o jquery (todas as opções)
<asp:TextBox runat="server" ID="myTextBox" />
$('#myTextBox')
não funcionaria.
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.
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]");
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>