1

我的内容页面中有一个表单,我正在通过 Javascript 进行一些客户端验证。如果我将 JS 代码直接放在内容页面中,则 Javascript 会按预期运行。但是,如果我将 JS 代码放在它自己的文件中并尝试从内容/母版页访问该文件(通过脚本标记的 src 属性),则在调用 JS 中的验证函数时会出现运行时错误。

具体来说,我收到以下错误。Microsoft JScript 运行时错误:在此行反对预期/需要 - document.getElementById('<%=txtemailId.ClientID %>').value

txtemailId 在内容页面中。

Javascript 代码放置在 validation.js 中并通过母版页访问。

我猜的原因是当 .net 解析文件时,它无法用稍后生成的客户端值替换 txtemailId.ClientID。那么,应该怎么做呢?谢谢!

4

4 回答 4

1

您是对的,<%=txtemailId.ClientID %>如果此代码位于 ASP.Net 文件中,则该代码只会被 ASP.Net 替换为真实的客户端 ID。所以如果你把这个 javascript 放在一个单独的 .js 文件中,ASP.Net 将一无所知,代码也不会被解析。

实现这一点的最简单方法是为您的函数设置控件 ID 参数。这样,您可以在 .aspx(或 .ascx)文件中包含调用 javascript 代码以及<%=txtemailId.ClientID %>代码。

于 2010-06-07T13:41:33.860 回答
1

答案很简单。

在您的内容页面中声明一个内联 JScript 变量,确保它位于您的标记之上。

<script>
  var emailClientId = &lt;%=txtemailId.ClientID%&gt;;
</script>

在您的 include.js 文件中使用全局范围的emailClientId变量。

显然这有点笨拙,因为并非所有 JScript 代码都包含在 include.js 文件中,这使得调试/诊断变得困难,因为不清楚具体值的来源。您应该在代码中清楚地注释/记录这一点,以便将来更容易维护代码库。

于 2010-06-07T13:42:52.187 回答
0

独立的 .js 文件不会通过 ASPX 解析器运行,因此不会评估您的表达式。

为了解决这个问题,您可以在带有控件 ID 的 ASPX 文件中设置全局变量(或函数参数或其他内容),然后在独立的 .js 文件中使用它们。

或者,您可以使用类名(不会被破坏)而不是 ID。(这使用 jQuery 非常简单)

于 2010-06-07T13:38:44.567 回答
0

像这样的方法最适合您想要实现的目标:

验证.js

var Validation = {
     EmailId: null,

     Validate: function() {
          var email = document.getElementById(EmailId).value;
     }
}

页面.aspx

Validation.EmailId = '<%=txtemailId.ClientID %>'; //initialize
Validation.Validate(); //whenever you want to validate
于 2010-06-07T13:41:02.400 回答