通过Javascript访问asp.net内容页面中的控件

时间:2010-06-07 13:34:02

标签: asp.net javascript master-pages clientid

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

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

txtemailId位于内容页面中。

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

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

4 个答案:

答案 0 :(得分:1)

你是对的,如果此代码在ASP.Net文件中,代码<%=txtemailId.ClientID %>将仅被ASP.Net替换为真实的客户端ID。因此,如果你将这个javascript放在一个单独的.js文件中,ASP.Net将不知道它,并且代码将不会被解析。

实现此目的的最简单方法是创建函数的控件ID参数。这样,您就可以在.aspx(或.ascx)文件中使用调用javascript代码以及<%=txtemailId.ClientID %>代码。

答案 1 :(得分:1)

答案很简单。

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

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

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

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

<强> validation.js

var Validation = {
     EmailId: null,

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

<强> page.aspx

Validation.EmailId = '<%=txtemailId.ClientID %>'; //initialize
Validation.Validate(); //whenever you want to validate