【问题标题】:What's the Meaning of and Fix for the Error 'The Controls Collection cannot...'错误“控件集合无法...”的含义和修复
【发布时间】:2008-09-19 22:16:50
【问题描述】:

使用 ASP.NET 2.0,我有一个 Web 应用程序,我在其中尝试使用 JavaScript 使选项卡容器中的一个选项卡成为活动选项卡。

建议基于:

var mX=document.getElementById('<%= tc1.ClientID%>')

$find('<%= tc1.ClientID%>').set_activeTabIndex(1); 

两者都会产生错误:

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).

我尝试将代码从 head 标签移到 body 标签中;同样的错误。

我也尝试了替代&lt;%# tc1.ClientID%&gt;,如:

var mX = document.getElementById('<%# tc1.ClientID %>')

mX.ActiveTabIndex="2";

生成一个空错误 - 上面的代码在 html 中呈现为:

var mX = document.getElementById('')

mX.ActiveTabIndex="2";

谁能用通俗易懂的语言解释这意味着什么以及解决方案是什么?

【问题讨论】:

    标签: .net asp.net javascript


    【解决方案1】:

    如果您刚刚开始使用 ASP.NET MVC,这是对这个晦涩错误的修复。我把这个笔记留在这里,以防像我一样的另一个人遇到这个问题,我真的很想拯救那个人,以免因为这个蹩脚的错误而浪费他的时间:

    更改

    您很可能想在 Site.Master 页面上添加一些 javascript,但是当您这样做时,您是在包含 jQuery 时在标签下方进行的。不,先生!请在

    和 中包含带有 javascript 代码的

    【讨论】:

      【解决方案2】:

      其实我以前也遇到过。 解释如下:http://west-wind.com/WebLog/posts/6148.aspx

      例如,如果您的标记如下所示:

      <asp:Panel id="whatever" runat="server">
          <script type="text/javascript">
               var mX=document.getElementById('<%= tc1.ClientID%>');
               //and so on...
          </script>
      </asp:Panel>
      

      如果您尝试以编程方式将控件添加到该面板,它将失败并出现您遇到的错误。

      一种解决方案是将您的 Javascript 放在页面中的其他位置。另一种方法(虽然是 hack)是这样的:

      <asp:Panel id="whatever" runat="server">
          <asp:PlaceHolder id="dontCare" runat="server">
              <script type="text/javascript">
                   var mX=document.getElementById('<%= tc1.ClientID%>');
                   //and so on...
              </script>
          </asp:PlaceHolder>
      </asp:Panel>
      

      现在 部分位于 PlaceHolder 内部,而不是直接位于 Panel 内部。将 C# 或 VB 代码中的控件添加到面板现在应该可以工作了(尽管将控件添加到 PlaceHolder 会失败。)

      编辑:
      是的,我也尝试过使用 ,但这仅适用于 DataBound 控件内部。例如,如果它位于 DataGrid 的中间并且我将它的 DataBind() 方法称为 PostBack,那么它会起作用。

      【讨论】:

        【解决方案3】:

        看起来和听起来好像代码 sn-ps 本身并不令人反感,但是一些修改控件集合的 other 代码现在对它们感到不安。您能说出错误实际发生在程序中的哪个位置吗?

        顺便说一句, 在这里不合适——它只适用于数据绑定控件。

        【讨论】:

          【解决方案4】:

          您不能将代码块与控件混合使用,而是将值存储在 javascript 中并以这种方式分配它......像这样:

          <div runat="server" id="rawr">
              <span id="myspan">HI</span>
          </div>
          </form>
          
          <script type="text/javascript">
              var obj = '<%= DateTime.Now.ToShortDateString() %>';
              var ele = document.getElementById("myspan");
              ele.innerHTML = obj;
          </script>
          

          【讨论】:

            【解决方案5】:

            从头部移动 javascript.. 并确保在使用 ajaxextenders 时将 scriptmanager 添加到 default.aspx..

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-01-02
              • 1970-01-01
              • 2019-08-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多