在jQuery中从asp.net runat服务器获取ID

我正在尝试使用ASP.NET在jQuery中创建一些东西。 但是来自runat="server"的ID与HTML中使用的id不同。

我曾经用它来从这种情况中获取ID:

 $("#").val(); 

但在这种情况下,它不起作用。 我对于为什么一无所知。

使用Javascript

 /* Modal */ function contatoModal() { //alert("Test"); alert($("#").val()); } 

HTML

  

有小费吗?

<%= txtTest.ClientID %>应该可以工作,但不能在服务器端脚本不执行的单独javascript文件中工作。 另一种可能性是使用类选择器:

  

然后:

 var value = $('.txtTest').val(); 

正如其他人所提到的,你可以将类选择器传递给jQuery,但这有点混乱。 我更喜欢使用jQuery属性以selector结尾 。 鉴于生成的ID是控件的展平层次结构,您可以使用“ends with”选择器来查找元素。

  

渲染时,生成的ID会变成这样(如果在主页的内容占位符内):

  

要找到此控件:

 $("input[id$='txtText']") 

在转发器中使用时要小心。

尝试将其放入变量名称:

 var txtTestID = '#' + '<%=txtTest.ClientID %>'; $(txtTestID).val(); 

我不确定<%=喜欢在双引号内。 不使用单引号时,我总是有混合行为。

使用ASP.NET 4并将ClientIDMode设置为“可预测”时,您可以根据层次结构预测ID。 或者将其设置为“静态”,因此asp.net不会搞砸它。

ScottGu的文章http://weblogs.asp.net/scottgu/archive/2010/03/30/cleaner-html-markup-with-asp-net-4-web-forms-client-ids-vs-2010-和净4-0-series.aspx

这在使用外部JS文件方案时非常有用。

在WebForm / HTML页面….

  

在Jquery

 var UserName = $("[id*=txtUserName]").val(); alert(UserName); 

100%肯定它为我工作….

Darin Dimitrov在回答中说:

<%= txtTest.ClientID %>应该可以工作,但不能在服务器端脚本不执行的单独javascript文件中工作。

我能找到的解决方案是:

  

  • 使用class而不是ID

使用类,您可以在任何地方检索值。 这是最好的解决方案之一(通常是最好的)

 var value = $('.txtTest').val(); 

  • aspx使用ClientID代码

您始终可以在aspx中调用ClientID ,但如果您正在使用某种结构,则这不是最佳解决方案。 我喜欢在测试时使用这种方法。

 var value = $('#<%=txtTest.ClientID%>').val(); 

您还可以在外部js文件中使用ClientID并使用解决方法。 这不是很好,只有在你真的需要的时候才使用它。 我通常在使用Telerik时这样做。

在aspx中:

 var id = <%=txtTest.ClientID%>; 

在js文件中:

 var value = $('#'+id).val(); 

  • 使用Control.ClientIDMode属性 Static

所以HTML变成了

  

并且js可以将其命名为

 var value = $('#txtTest').val(); 

此解决方案的问题在于您需要非常小心,以避免页面ids的重复。 请勿尝试在控制器中使用Static模式。

作为州MSDN:

ClientID值设置为ID属性的值。 如果控件是命名容器,则该控件将用作其包含的任何控件的命名容器层次结构的顶部。


shaans的答案链接是检查有关ClientIDMode的额外信息的绝佳位置。

使用ASP.NET 4 Web窗体清除HTML标记 – 客户端ID(VS 2010和.NET 4.0系列)

要避免渲染ID的问题,请改用类。 渲染期间不会更改:

 function contatoModal() { //alert("Test"); alert($(".txtTest").val()); } 

HTML:

 < input runat="server" id="txtTest" value="test" class="txtText" />