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

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

$('#myTextBox')不起作用。

在页面上呈现时,上面的aspx代码更改为

这是因为.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树很大。

2选项:

使用CssClass – 强烈推荐。 因为使用类的选择器干净且不复杂。

如果您想知道,.net控件的CssClass与传统html控件的class相同。

  //add CssClass $('.myclass') //selector 

3选项:

在控件上使用在.NET Framework 4.0中引入的ClientIDMode="Static" ,以便它的ID保持不变。 – 也推荐。

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

注意:根据我的经验,我看过丑陋的选择器,如$('#ctl00_Main_myTextBox') 这是直接复制粘贴从页面呈现的ID并在脚本中使用它的结果。 看,这会奏效。 但想想如果控件ID或主ID发生变化会发生什么。 显然,您将不得不重新访问这些ID并再次更改它们。 而不是那样,使用上面的选项之一并涵盖。

除了krishna的答案之外,你可以使用name属性,当它由IIS呈现为HTML时,分配的name属性值应该与ID值相同:

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

除了@krishna的答案之外,您还可以使用ClientIDMode="Static"在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设置,如下所示

     ...