$('#<%= nameLabel.ClientID%>')在.js文件中不起作用,并且当脚本在页面中时有效

时间:2009-12-25 11:19:31

标签: asp.net jquery

$('#<%=nameLabel.ClientID%>')正在我的脚本中用于jquery。

当这是在...页面中的块时,它工作正常,因为它的内容页面被正确评估为$('#ctl00_contentPanel1_nameLabel'),我可以在调试脚本时看到它。

然而,当我在.js文件中保留相同的脚本时,它不会被评估为$('#ctl00_contentPanel1_nameLabel')因此不起作用。

确定.js脚本已加载,因为我可以调试&amp;其他一些功能也可以使用。 我正在使用ScriptManagerProxy。

请帮帮忙?

提前致谢。

5 个答案:

答案 0 :(得分:7)

与其他人一样,解释<%=nameLabel.ClientID%>需要在服务器上运行。但是你可以这样做:

$("[id$=_nameLabel]")

检查所有ID并匹配以_nameLabel结尾的ID。

答案 1 :(得分:4)

简单回答:您不能在外部.js文件中使用内联asp.net脚本。

但是有两篇文章和源代码使这成为可能

只需点击here,然后点击here

此外,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')