在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" />