【问题标题】:Accessing controls in Master page from content page从内容页面访问母版页中的控件
【发布时间】:2014-03-12 17:22:43
【问题描述】:

我正在尝试使用这样的javascript从内容页面(Asp.net)访问母版页中的控制

alert(document.getElementById('<%=((Label)Master.FindControl("lbl")).ClientID %>').value);

Master页面中的控件如下,

 <asp:Label ID="lbl" runat="server" Text="one"></asp:Label>

但不幸的是,它不起作用。我得到未定义的值

【问题讨论】:

  • 在什么情况下它不起作用?您是否从 .NET 获得 Exception 或警报中的 undefined 值? FindControl() 方法不是递归的,所以除非你的lbl 控件是Master 的直接子控件,否则它不会被找到。
  • 那么解决方案是什么?我该如何纠正?
  • 我得到未定义的值
  • 为什么不使用纯 JavaScript 解决方案? jQuery 对你有很大帮助:$("#parent").find(".contrl-class-name").val(); 。如果您提供更多信息,我们会给您更好的答案。
  • 我知道它可以工作,我曾参与过可以正常工作的项目。我只是错过了一些东西,这就是我寻求帮助的原因

标签: javascript asp.net master-pages content-pages


【解决方案1】:

我注意到您实际上正在访问&lt;asp:Label /&gt; 控件生成的元素的.value 字段,即&lt;span&gt;&lt;/span&gt;。这种类型的元素不会为 .value 属性返回任何内容。如果您实际上是在尝试访问其文本,请使用:

alert(document.getElementById('<%=((Label)Master.FindControl("lbl")).ClientID %>').innerText);

alert(document.getElementById('<%=((Label)Master.FindControl("lbl")).ClientID %>').innerHTML);

【讨论】:

    【解决方案2】:

    问题在于母版页是一个命名容器,因此控件的客户端 id 接收到一个前缀,该前缀是命名容器的 id。 使用JavaScript,很容易解决:

    var elm = document.querySelector('[id$="lbl"]');
    

    $= 的意思是,结束于。

    【讨论】:

      【解决方案3】:

      在您的页面中包含jQuery 并使用此脚本:

      <script>
      $(document).ready(function(){
          alert($("#lbl").text());
      });
      </script>
      

      【讨论】:

        【解决方案4】:

        这对我有用:(检查下面的代码)

        alert(document.getElementById('<%=(Master.FindControl("lbl")).ClientID %>').innerText);
        

        【讨论】:

          【解决方案5】:

          使用getElementById 对我不起作用。可以改用以下内容:

          $find('<%=((Label)Master.FindControl("lbl")).ClientID %>');
          

          【讨论】:

            猜你喜欢
            • 2014-09-20
            • 2020-01-14
            • 1970-01-01
            • 2010-09-27
            • 1970-01-01
            • 2011-01-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多