当外部文件中有document.getElementById(';<;%=control.ClientID%>;';)时,将JavaScript移动到该文件中

当外部文件中有document.getElementById(';<;%=control.ClientID%>;';)时,将JavaScript移动到该文件中,javascript,asp.net,refactoring,Javascript,Asp.net,Refactoring,我有一个现有的ASP.NET网页,页面上内嵌了几百行JavaScript代码 代码中充满了引用服务器端控件名称的代码,例如: function SetVisibility(isVisible) { document.getElementById('<%=someDiv.ClientID%>').style.display = (isVisible ? "block" : "none"); } 函数集可见性(isVisible){ document.getElemen

我有一个现有的ASP.NET网页,页面上内嵌了几百行JavaScript代码

代码中充满了引用服务器端控件名称的代码,例如:

  function SetVisibility(isVisible) {
    document.getElementById('<%=someDiv.ClientID%>').style.display = (isVisible ? "block" : "none");
  }
函数集可见性(isVisible){
document.getElementById(“”).style.display=(isVisible?“块”:“无”);
}
如果我将脚本移动到外部.JS文件中,.ClientID引用将不再解析,页面将在一堆错误中崩溃


解决这个问题的最好办法是什么?我可以更改每个函数以将控件作为参数,也可以用$find()替换.getElementByID。。。但是我希望有一种更简单/更快的方法。

您不能像
那样将内联ASP.NET语法移动到一个js变量页面,并在这些函数中使用该变量。如果您使用的是v4.0,那么也可以使用clientID静态模式,这样就不必执行上一步。原因是asp.net引擎无法呈现js文件,因此这些文件永远无法解决。如果您使用的是像jquery这样的插件,那么您可以轻松地绑定到className,将cssClass分配给控件,甚至可以绑定到Id包含的内容(例如:Id包含someDiv)。那么
。或者ASP.Net引擎处理的任何内容(cshtml、ashx、vbhtml)如何呢?我想我已经用一些代码解释了@PSL。这有用吗?太好了,谢谢。将clientdmode设置为static有什么坏处吗?@josephtyons,没有坏处。我们都在努力解决这个问题,ASP.Net团队在4.0中引入了这个解决方案。快乐编码!!!
<script type="text/javascript">
var myHtmlElementIDs={};
myHtmlElementIDs.ContainerDiv='<%=someDiv.ClientID%>';
</script>
function SetVisibility(isVisible) {
    document.getElementById(myHtmlElementIDs.ContainerDiv).style.display 
     = (isVisible ? "block" : "none");
  }
function SetVisibility(isVisible) {
    document.getElementById('actualControlID').style.display 
     = (isVisible ? "block" : "none");
  }