使用 jquery 访问 Asp.net 控件(所有选项)

IT技术 javascript c# jquery asp.net
2021-02-06 06:47:58

如何使用jquery访问asp.net控件

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

$('#myTextBox') 行不通。

3个回答

<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 并再次更改它们。取而代之的是,使用上述选项之一并被覆盖。

@Bartdude - 它会导致生成的 HTML 重复。ClientIDMode只保留现有的 ID,因此在区分单击的 ID 时必须小心。在这种情况下,使用类和/或数据属性选择器可能是一个不错的选择。
2021-03-24 06:47:58
只是为了按照 JQuery 文档在语法上正确,实际的 ID 应该用引号引起来。$("[id$='myTextBox']") $("[id*='myTextBox']")
2021-03-26 06:47:58
快速无辜的问题:如果您在用户控件中的控件中执行此操作,并且在页面上添加此用户控件两次,选项 4 会发生什么情况。运行时是否有某种验证,或者它只会导致结果 HTML 中的 id 重复?
2021-03-27 06:47:58
谢谢 !正是我所想的。我想你不能拥有一切:安全性和灵活性。
2021-04-03 06:47:58

除了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>