什么是错误的意义和修复'控件集合不能......'

时间:2008-09-19 22:16:50

标签: .net asp.net javascript

使用ASP.NET 2.0,我有一个Web应用程序,我尝试使用JavaScript在tab-container中为活动选项卡创建一个选项卡。

建议基于:

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";

任何人都可以用普通(呃)语言解释这意味着什么以及解决方案是什么?

5 个答案:

答案 0 :(得分:3)

如果你刚刚开始使用ASP.NET MVC,这是对这个模糊错误的修复。我在这里留下这个注释,以防另一个像我一样的人遇到这个问题而且我真的想因为这个蹩脚的错误而浪费时间浪费那个人:

改变&lt; SCRIPT&gt;的位置标签!

很可能你想在Site.Master页面上放一些javascript,但是当你这样做时,你在包含jQuery时在标签下面做了。不,先生!请包含&lt; script&gt;使用&lt; head&gt;中的javascript代码标记进入&lt; body&gt; 。祝你好运!

答案 1 :(得分: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放在页面中的其他位置。另一种方式(虽然是黑客)是这样的:

<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>

现在&lt;%= ...%&gt; part位于PlaceHolder内部,而不是直接位于Panel内部。将C#或VB代码中的控件添加到Panel现在应该可以工作(尽管向PlaceHolder添加控件会失败。)

修改
是的,我尝试使用&lt;%#...%&gt;相反,但这仅适用于DataBound控件内部。例如,如果它位于DataGrid的中间,并且我将此PostBack调用它的DataBind()方法,那么它将起作用。

答案 2 :(得分:0)

它看起来和听起来像代码片段本身并不令人反感,但是一些正在修改控件集合的其他代码现在对它们感到不满。你能告诉程序中错误实际发生的位置吗?

顺便说一下,&lt;%#%&gt;这里不合适 - 它仅适用于数据绑定控件。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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