2010-06-07 84 views
1

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

具体来说,我得到了下面的错误。 微软JScript运行时错误:反对预期/在此线所需 - 的document.getElementById( '<%= txtemailId.ClientID%>')值

txtemailId是在内容页。

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

我猜的原因是,当.NET被解析的文件,它是无法与将在以后生成的客户端值代替txtemailId.ClientID。那么,应该如何去做呢?谢谢!

+0

只需在页面标签中包含ClientIDMode =“Static”,您就可以使用与旧版本相同的JavaScript。这已经包含在.net 4.0中。 – roshan 2014-01-28 07:12:30

回答

1

答案很简单。

在您的内容页声明在线JScript中的变量,确保这是你的标签上面。

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

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

很明显,这有点笨拙,因为并不是所有的JScript代码都包含在include.js文件中,这使得调试/诊断变得很困难,因为它没有明确地明确值的来源。您应该在代码中清楚地评论/记录这些内容,以便将来更轻松地维护他的代码库。

0

独立.js文件不通过ASPX解析器运行,所以你的表达不被评估。

为了解决这个问题,你可以设置在ASPX文件全局变量(或函数的参数,或者别的什么)与对照的ID,然后在独立的.js文件中使用它们。

或者,你可以使用类名(不得到错位),而不是标识。 (这是使用非常简单的jQuery)

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 
1

你说得对,代码<%=txtemailId.ClientID %>只会被替换w^ith如果此代码位于ASP.Net文件中,则由ASP.Net提供的真实客户端ID。所以如果你把这个javascript放在一个独立的.js文件中,ASP.Net将一无所知,代码将不会被解析。

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

相关问题