在ASP.NET中,是否有可能使用在ASP.NET中,是否可以在外部JavaScript文件中使用'<%= control.ClientID%>',或者它是否必须作为脚本块存在于ASPX本身中?
'<%= control.ClientID %>'
在外部JavaScript文件还是必须是在ASPX本身作为脚本块?
如果这是不可能的,是否有任何技巧使这项工作?
在ASP.NET中,是否有可能使用在ASP.NET中,是否可以在外部JavaScript文件中使用'<%= control.ClientID%>',或者它是否必须作为脚本块存在于ASPX本身中?
'<%= control.ClientID %>'
在外部JavaScript文件还是必须是在ASPX本身作为脚本块?
如果这是不可能的,是否有任何技巧使这项工作?
或者你可以在一个阵列注册客户端id和在JavaScript文件中使用此阵。
.aspx的(JS)
var pageControls = {
'myControlId1' : '<%= control1.ClientID %>',
'myControlId2' : '<%= control2.ClientID %>',
...
}
的Javascript
alert(pageControls['myControlId2']);
据我所知,它必须在aspx本身。 我一直都在做的是把它作为一个参数。例如,
function doSometing(clientId){
...
}
从asp.net一个脚本块中:
doSomething(<%= control.ClientID %>);
总之,服务器标签中的任何代码都必须通过ASP.NET处理管道,以便它可以写成输出。毕竟,<%= ... %>
只是Response.Write(...)
的简写。
所以,如果你可以得到一个外部脚本文件来通过处理管道,那么你可以有服务器标签。然而,更简单的方法是编写一个服务器端控件,该控件将JavaScript块发送到包含客户端ID和可用于传递服务器端ID,返回客户端ID的页面中。然后在你的外部脚本中使用这个函数。当然,在ASP.NET 4(或MVC)中,您可以更好地控制为客户端生成的ID,因此可以完全避免这种情况。
你也可以简单地注册的页面作为一个aspx页面,如重命名文件到MyFile.js.aspx
然后,只需添加<%页%>指令在顶部,你可以嵌入你提到的ID。
但是,这意味着JS不会被浏览器缓存(除非您自己专门添加缓存),并且由于服务器上需要解析,所以还有额外的开销。
@Russ:感谢您的纠正! :) – Marc 2011-01-31 21:44:35