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