错误"控件集合无法..."的含义和解决方法

时间:2020-03-06 14:28:06  来源:igfitidea点击:

使用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标签中。同样的错误。

我也尝试了替代方法<%tc1.ClientID%>,如下所示:

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

mX.ActiveTabIndex="2";

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

var mX = document.getElementById('')

mX.ActiveTabIndex="2";

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

解决方案

看起来和听起来好像这些代码片段本身并不是冒犯性的,但是正在修改控件集合的其他一些代码现在对此感到不安。我们能说出程序中实际发生错误的地方吗?

顺便说一句,<%%>不适合这里,它仅适用于数据绑定控件。

我们不能将代码块与控件混合在一起,而是将值存储在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>

我实际上曾经遇到过。这是一个解释: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内部。现在,可以将Cor VB代码中的控件添加到面板上了(尽管添加控件到PlaceHolder会失败。)

编辑:
是的,我也尝试使用<%...%>,但这仅用于DataBound控件中。例如,如果它位于DataGrid的中间,而我将其称为PostB的DataBind()方法,则该方法有效。

如果我们刚刚开始使用ASP.NET MVC,则可以解决此隐患。如果有另一个像我这样的人遇到这个问题,我真的在这里留了下来,我真的想避免那个人因为这个la脚的错误而浪费自己的时间:

更改<SCRIPT>标签的位置!!!

我们很可能希望在Site.Master页面上放置一些javascript,但是当我们添加jQuery时,将其放在了标签下方。不,先生!请在<head>之外的<body>中包括<script>标签和javascript代码。祝你好运!