【问题标题】:Accessing a control in asp.net content page through Javascript通过Javascript访问asp.net内容页面中的控件
【发布时间】:2011-02-28 17:11:57
【问题描述】:

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

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

txtemailId 在内容页面中。

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

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

【问题讨论】:

  • 只需在页面标签中加入 ClientIDMode="Static",您将能够以相同的旧方式使用 javascript。这已包含在 .net 4.0 中。

标签: asp.net javascript master-pages clientid


【解决方案1】:

这个问题的答案很简单。

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

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

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

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

【讨论】:

    【解决方案2】:

    你是对的,代码&lt;%=txtemailId.ClientID %&gt; 只有在 ASP.Net 文件中时才会被 ASP.Net 替换为真实的客户端 ID。所以如果你把这个 javascript 放在一个单独的 .js 文件中,ASP.Net 将一无所知,代码也不会被解析。

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-08
          • 1970-01-01
          • 2012-02-29
          • 2014-09-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多