尝试添加ajax TabContainer,得到错误“控件集合无法修改,因为控件包含代码块(即<%...%>)。”

时间:2008-12-10 18:53:41

标签: visual-studio-2008 ajaxcontroltoolkit

我想在我的网页上添加一个ajax:TabContainer。我没有得到任何构建错误,但是当我尝试浏览到该页面时,它给出了错误:“控件集合无法修改,因为控件包含代码块(即<%...%>) 。“

我重新下载了样本站点的Ajax Control Toolkit,在VS中打开了解决方案,为TabContainer运行了样本,并且运行正常。我认为它可能是Ajax Control Toolkit的另一个版本 - 但没有。这两个站点引用的AjaxControlToolkit.dll文件是相同的。为什么我不能让TabContainer在我的网站上运行?

还有一个问题,但我不知道它是否相关。我刚刚安装了Visual Studio 2008.一旦我打开我的网站,VS就会自动在工具箱中创建“AJAX Controls”选项卡,并用所有ajax控件填充它。在源代码中,所有控件都以“ajax”为前缀 - 即“< ajax:TabContainer runat =”server“...>”。

但是,当我打开示例网站时,Visual studio在工具箱中创建了另一个选项卡 - “AjaxControlToolkit Components”,其中包含与“AJAX Controls”中相同的所有控件。我不知道为什么它两次添加相同的控件(但奇怪的是,在工具箱中有不同的图标)。在源代码中,所有控件都以“ajaxToolkit”为前缀 - 即“< ajaxToolkit:TabContainer runat =”server“...>”。这里发生了什么?我只是希望在我的网站上使用禁令TabContainer。

6 个答案:

答案 0 :(得分:6)

您不能使用<%=%> (写)使用标准服务器呈现的控件内的块 - 您会收到此错误。

为了让ASP AJAX组件正常工作,您需要:

<head runat="server">...

否则它也会因此错误而崩溃。

但是,您可以在这些服务器控件中数据绑定

<head runat="server">
    <link rel="stylesheet" type="text/css" 
        href="<%# ResolveUrl( "~/styles/common.aspx" ) %>" />
...

然后在你的页面加载:

Page.Header.DataBind();

由于ASP WebForms将控件呈现为组件集合的方式而发生错误 - 它们可以处理集合(并期望databind&lt;%#)或文字写入(并期望&lt;%=)但不能同时处理两者。< / p>

永久避免此问题的最佳方法是切换到ASP MVC。

答案 1 :(得分:2)

此错误并非特定于Ajax。

你可以尝试将你的ajax:TabContainer放在asp:Panel中。 或者,删除&lt;%...%&gt;来自您网页的代码块。

答案 2 :(得分:1)

我已经明白了!

如果您在<head>包含<script>标记时尝试使用AJAX控件,则会收到此错误消息。

我只是将JavaScript移到了正文中,现在看起来效果很好。

答案 3 :(得分:1)

嘿伙计们,这不仅仅是javascript标签,而是使用&lt;%=%&gt;的页面的head标签内的任何内容或&lt;%Response.Write%&gt;。更改代码以使用数据绑定指令&lt;%#eval( some code )%&gt;或者将东西移到身体上(这对于加快页面的加载时间也很有用)。

答案 4 :(得分:0)

Pragnesh, 检查HEAD标签之间的任何JavaScript。我和&lt; %%&gt;有一些javascript阻止AJAX选项卡控件工作的代码块。

答案 5 :(得分:-1)

不需要做任何事情只需保持&lt;%= ....%&gt;在

中的母版页中具有的部分代码