正文:
如
Darin Dimitrov在他的回答中所说:
<%= txtTest.ClientID %>
应该可以工作,但不适用于单独的JavaScript文件,因为服务器端脚本不会执行。
我能找到的解决方案是:
<input runat="server" id="txtTest" value="test" class="txtTest" />
使用`class`而不是`ID`。使用类,您可以在任何地方检索值。这是最好的解决方案之一(通常是最佳的)。
var value = $('.txtTest').val();
您可以始终在aspx中调用ClientID
,但如果您正在使用某种结构,则这不是最佳解决方案。当我测试某些内容时,我喜欢使用此方法。
var value = $('#<%=txtTest.ClientID%>').val();
您也可以通过一个解决方法在外部js文件中使用
ClientID
。但是
这不太美观,只有在确实需要时才使用。我通常在使用
Telerik
时这样做。
在aspx中:
var id = <%=txtTest.ClientID%>
在 js 文件中:
var value = $('#'+id).val();
使用
Control.ClientIDMode Property 属性设置为
Static
,这样HTML就变成了:
<input runat="server" id="txtTest" value="test" ClientIDMode="Static" />
这句话的翻译是:“js可以按照它的名称调用它”。
var value = $('#txtTest').val();
这种解决方案的问题在于你需要非常小心,避免页面上的id重复。尽量不要在控制器中使用“Static”模式。
正如MSDN所述:
“ClientID”值设置为“ID”属性的值。如果控件是命名容器,则该控件用作它包含的任何控件的命名容器层次结构的顶部。
“
shaans's answer的链接是一个很棒的地方,可以查看有关ClientIDMode的额外信息。”
“
使用ASP.NET 4 Web Forms - Client IDs(VS 2010和.NET 4.0系列)清理HTML标记”