我想在我的网页上添加一个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。
答案 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;在
中的母版页中具有的部分代码