$('#<%=nameLabel.ClientID%>')
正在我的脚本中用于jquery。
当这是在...页面中的块时,它工作正常,因为它的内容页面被正确评估为$('#ctl00_contentPanel1_nameLabel')
,我可以在调试脚本时看到它。
然而,当我在.js文件中保留相同的脚本时,它不会被评估为$('#ctl00_contentPanel1_nameLabel')
因此不起作用。
确定.js脚本已加载,因为我可以调试&amp;其他一些功能也可以使用。 我正在使用ScriptManagerProxy。
请帮帮忙?
提前致谢。
答案 0 :(得分:7)
与其他人一样,解释<%=nameLabel.ClientID%>
需要在服务器上运行。但是你可以这样做:
$("[id$=_nameLabel]")
检查所有ID并匹配以_nameLabel结尾的ID。
答案 1 :(得分:4)
简单回答:您不能在外部.js文件中使用内联asp.net脚本。
但是有两篇文章和源代码使这成为可能:
此外,Asp.NET 4.0为这个问题提供了一个很好的解决方案,称为ClientIDMode
Markup: <asp:TextBox ID="txtEcho2" runat="server" ClientIDMode="Static" />
Output: <input id="Text1" name="ctl00$MasterPageBody$ctl00$txtEcho2" />
Markup: <asp:TextBox ID="TextBox1" ClientID="Echo" runat="server" ClientIDMode="Static" />
Output: <input id="Text2" name="Echo" />
Markup: <asp :TextBox ID ="txtEcho" runat ="server" ClientIDMode ="Legacy" />
Output: <input id="ctl00_MasterPageBody_ctl00_txtEcho" name="ctl00$MasterPageBody$ctl00$txtEcho" />
有关详细信息,请按here
删除答案 2 :(得分:2)
这有两个原因,这在.js文件中不起作用。
Javascript文件不是通过ASP.NET引擎运行的,因此服务器标记&lt;%= ...%&gt;从未被执行过。 (如果您可以完全控制IIS,则可以注册要由引擎运行的文件,但由于第二个原因,它仍然无法工作。)
.js文件是与页面分开请求的,因此您想要获取id的服务器控件不再存在。它仅在处理主页面请求时存在。
您可以放置代码将id分配给页面中的变量,并在.js文件中使用该变量:
var nameLabel = '#<%=nameLabel.ClientID%>';
答案 3 :(得分:1)
服务器代码在外部js文件中不起作用。
答案 4 :(得分:1)
ASP.NET引擎不提供外部JavaScript文件,因此任何服务器端标记(如<%= ... %>
)都不起作用。您可以将css类应用于元素并使用CSS选择器:
$('.nameLabel')