我有一个现有的ASP.NET网页,页面上有几百行JavaScript代码。
代码中充满了引用服务器端控件名称的代码,例如:
function SetVisibility(isVisible) {
document.getElementById('<%=someDiv.ClientID%>').style.display = (isVisible ? "block" : "none");
}
如果我将脚本移动到外部.JS文件,则不再解析.ClientID引用,并且页面会在一堆错误中崩溃。
解决此问题的最佳方法是什么?我可以更改每个函数以将控件作为参数,或者我可以用$ find()替换.getElementByID ...但我希望有更简单/更快的方法。
答案 0 :(得分:3)
您无法将<%= or <#
等内联ASP.NET语法移动到外部JavaScript文件中。
您只需要对元素ID进行适当的引用。
案例1:
ID由ASP.Net运行时自动生成,没有ClientIDMode 可用(ASP.Net&lt; 4.0)
的解决方案强> :
在.aspx页面
<script type="text/javascript">
var myHtmlElementIDs={};
myHtmlElementIDs.ContainerDiv='<%=someDiv.ClientID%>';
</script>
在JS文件中
function SetVisibility(isVisible) {
document.getElementById(myHtmlElementIDs.ContainerDiv).style.display
= (isVisible ? "block" : "none");
}
案例2:
控制生成客户端ID。没有母版页或嵌套控件 已使用,或
ClientIDMode=Static
可用(ASP.Net&gt; = 4.0)
解决方案 :无需担心ClientID,因为它不会被更改
function SetVisibility(isVisible) {
document.getElementById('actualControlID').style.display
= (isVisible ? "block" : "none");
}