在ASP.NET中,是否可以使用'<;%=control.ClientID%>';在外部javascript文件中,还是必须作为脚本块在ASPX本身中?

在ASP.NET中,是否可以使用'<;%=control.ClientID%>';在外部javascript文件中,还是必须作为脚本块在ASPX本身中?,javascript,asp.net,Javascript,Asp.net,在ASP.NET中,是否可以使用 '<%= control.ClientID %>' “” 在外部javascript文件中,还是必须作为脚本块在ASPX本身中 如果这是不可能的,有什么诀窍可以让它工作吗?据我所知,它必须在aspx本身。 我一直做的就是把它当作一个论点来传递。 例如 从脚本块内的asp.net: doSomething(<%= control.ClientID %>); doSomething(); 或者您可以在数组中注册客户端id,并在java

在ASP.NET中,是否可以使用

'<%= control.ClientID %>' 
“”
在外部javascript文件中,还是必须作为脚本块在ASPX本身中


如果这是不可能的,有什么诀窍可以让它工作吗?

据我所知,它必须在aspx本身。 我一直做的就是把它当作一个论点来传递。 例如

从脚本块内的asp.net:

doSomething(<%= control.ClientID %>);
doSomething();

或者您可以在数组中注册客户端id,并在javascript文件中使用此数组

Aspx(Js)


简而言之,服务器标记中的任何代码都必须经过ASP.NET处理管道,以便将其写入输出。毕竟,
只是
响应的简写。写(…)


因此,如果您可以获得一个外部脚本文件来通过处理管道,那么您可以在其中包含服务器标记。然而,一种更简单的方法是编写一个服务器端控件,该控件向包含客户端id的页面中发送一块JavaScript,以及一个可用于在传递服务器端id时返回客户端id的函数。然后在外部脚本中使用此函数。当然,在ASP.NET 4(或MVC)中,您可以更好地控制为客户端生成的ID,因此可以完全避免这种情况。

您也可以简单地将页面注册为aspx页面,例如将文件重命名为MyFile.js.aspx

然后只需在顶部添加指令,就可以嵌入您提到的ID

但是,这意味着浏览器不会缓存JS(除非您自己专门添加缓存),而且由于服务器上需要解析,因此会有额外的开销

doSomething(<%= control.ClientID %>);
var pageControls = {
   'myControlId1' : '<%= control1.ClientID %>',
   'myControlId2' : '<%= control2.ClientID %>',
   ...
}
alert(pageControls['myControlId2']);