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

Javascript 在jQuery中从asp.net runat服务器获取ID,javascript,jquery,asp.net,runatserver,Javascript,Jquery,Asp.net,Runatserver,我正在尝试使用ASP.NET在jQuery中制作一些东西。但是runat=“server”中的ID与HTML中使用的ID不同 我曾经用它从这种情况下获取ID: $("#<%=txtTest.ClientID%>").val(); $(“#”)val(); 但在这种情况下,它不起作用。我不知道为什么 Javascript /* Modal */ function contatoModal() { //alert("Test"); alert($("#<%=tx

我正在尝试使用ASP.NET在jQuery中制作一些东西。但是
runat=“server”
中的ID与HTML中使用的ID不同

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

$("#<%=txtTest.ClientID%>").val();
$(“#”)val();
但在这种情况下,它不起作用。我不知道为什么

Javascript

/* Modal */
function contatoModal() {
    //alert("Test");
    alert($("#<%=txtTest.ClientID%>").val());
}
/*模态*/
函数contatomodel(){
//警报(“测试”);
警报($(“#”)val();
}
HTML

任何提示?

都应该有效,但不能在服务器端脚本不执行的单独javascript文件中使用。另一种可能是使用类选择器:

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

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

function contatoModal() {

//alert("Test");

alert($(".txtTest").val());

}
HTML:

尝试将其放入变量名中:

var txtTestID = '#' + '<%=txtTest.ClientID %>';

$(txtTestID).val();
var txtestid='#'+'';
$(txtestid.val();

我不确定在使用ASP.NET 4时,如果
和ClientIDMode设置为“可预测”,您可以根据层次结构预测ID。或者将其设置为“静态”,这样asp.net就不会把它搞砸

ScottGu关于它的文章

这在使用外部JS文件场景时非常有用。

正如他在回答中所说:

应该可以工作,但是不能在单独的javascript中工作 服务器端脚本不执行的文件

我能找到的解决方案是:

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

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

var value = $('#<%=txtTest.ClientID%>').val();
在js文件中:

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

  • 使用
    Static
因此HTML变成了

<input runat="server" id="txtTest" value="test" ClientIDMode="Static" />
此解决方案的问题是,您需要非常小心,以避免页面的
id
上出现重复。尽量不要在控制器中使用
静态
模式

如MSDN所述:

ClientID值设置为ID属性的值。如果 控件是一个命名容器,该控件用作 它包含的任何控件的命名容器的层次结构


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


正如其他人所提到的,您可以将类选择器传递给jQuery,但这有点混乱。我更喜欢用英语。假设生成的ID是一个扁平的控件层次结构,则可以使用“ends with”选择器查找元素

<input runat="server" id="txtText" />

在中继器中使用此选项时要小心。

在WebForm/HTML页面中

<asp:TextBox ID="txtUserName" runat="server" Class="form-control"></asp:TextBox>  

100%确定它对我有用….

它为文本框和的ID实际输出了什么?我还想补充一下,它看起来更整洁了。这也不起作用。与我的示例相同,但无论如何还是要感谢提示=D PS:这次我使用了单引号=哇!这很有效。。。我把我的函数放在我的ascx页面中,现在它可以工作了。我知道类的一部分(但也谢谢你的提示),它在一个单独的javascript中工作(作为类)。无法在我的function.js页面中运行服务器id?script_path:script/function.js ascx_path:components/contact.ascx regards无法将asp.net id代码放入js文件中,asp.net不会查看其中以放入其值。此方法用于。。。Asp.net控件。。。如果您想选择id包含给定字符串的元素,这个答案将起作用。。
var id = <%=txtTest.ClientID%>;
var value = $('#'+id).val();
<input runat="server" id="txtTest" value="test" ClientIDMode="Static" />
var value = $('#txtTest').val();
<input runat="server" id="txtText" />
<input id="ctl00_contentplaceholder_txtText" />
$("input[id$='txtText']")
<asp:TextBox ID="txtUserName" runat="server" Class="form-control"></asp:TextBox>  
var UserName = $("[id*=txtUserName]").val();
alert(UserName);