如何使用jquery访问asp.net控件
<asp:TextBox runat="server" ID="myTextBox" />
$('#myTextBox')
行不通。
如何使用jquery访问asp.net控件
<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 控件所在的主控信息被预先添加,这使得我们编写选择器有点棘手。
你有几个选择。这绝不是全面的,但我会尝试一下。
选项1:
$('#<%= myTextBox.ClientID %>')
使用ClientID
- 推荐但 meh.. 不是那么多。ClientID
如果可以的话,我会尽量避免写作。主要原因是,您只能在.aspx
页面中使用它,而不能在外部.js
文件中使用它。
选项2:
$('[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 中引入的 ,这样它的 ID 将保持不变。- 也推荐。
<asp:TextBox runat="server" ID="myTextBox" ClientIDMode="Static" /> //add ClientIDMode
$('#myTextBox') //use the normal ID selector
注意:根据我的经验,我见过像$('#ctl00_Main_myTextBox')
. 这是直接复制粘贴从页面渲染的ID并在脚本中使用的结果。看,这会奏效。但是想想如果控制ID或主ID改变会发生什么。显然,您将不得不重新访问这些 ID 并再次更改它们。取而代之的是,使用上述选项之一并被覆盖。
除了krishna的回答之外,当 IIS 在 HTML 中呈现时,您还可以使用 name 属性,分配的 name 属性值应与 ID 值相同:
例子
<asp:TextBox ID="txtSalesInvoiceDate" runat="server" />
var invDate = $("input[name=txtSalesInvoiceDate]");
除了@krishna 的回答之外,您还可以使用ClientIDMode="Static"
In ASP.NET 4.0在页面级别和网站级别控制 Web 控件客户端 ID 的生成。
在页面级别,如下图:
<%@ 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>