当它包含document.getElementById('<%= control.ClientID%>')时,将JavaScript移动到外部文件

时间:2013-11-15 15:59:26

标签: javascript asp.net refactoring

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

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

  function SetVisibility(isVisible) {
    document.getElementById('<%=someDiv.ClientID%>').style.display = (isVisible ? "block" : "none");
  }

如果我将脚本移动到外部.JS文件,则不再解析.ClientID引用,并且页面会在一堆错误中崩溃。

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

1 个答案:

答案 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");
  }