无法修改Controls集合,因为控件包含代码块(即<%...%>)

时间:2010-12-21 18:20:05

标签: asp.net webforms

我试图在母版页的代码隐藏中添加一个面板作为另一个面板的子控件,这很简单:

Panel1.Controls.Add(Panel2)

然而,当我尝试这样做时,我收到此错误:

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

有很多问题涉及&lt;%=%&gt;头部的元素,我没有。我甚至删除了所有&lt; %%&gt;来自此页面的元素无济于事,错误仍然存​​在。任何人都可以建议一种方法来实现这一目标吗?

3 个答案:

答案 0 :(得分:5)

*答案B的示例*

===代码有错误===

<script type="text/javascript">
    jQuery(document).ready(
        function() {
            alert('Hello!');
            jQuery("#<%=TxtSampleId.ClientID %>").focus();
        }
    );
</script>

===代码没有错误===

&lt; asp:PlaceHolder id =“dontCare”runat =“server”&gt;

<script type="text/javascript">
    jQuery(document).ready(
        function() {
            alert('Hello!');
            jQuery("#<%=TxtSampleId.ClientID %>").focus();
        }
    );
</script>

&LT; / ASP:占位符&GT;

答案 1 :(得分:1)

“控件集合无法修改,因为控件包含代码块(即&lt;%...%&gt;)。”至少可以说错误非常烦人。这是一个微软拒绝修复的错误,因为有解决方法。当您尝试从后面的代码动态加载控件时,会发生这种情况,但页面源会发生冲突。可能会发生一些事情......

注意:Stack Overflow不能很好地处理代码示例的语法,因此我将用一个字母引用每个答案,在稍后的文章中,我将尝试输入一个示例。但是我不想把这篇文章弄得乱七八糟,因为我想得到我的观点。

A。)你有&lt;%Response.Write(“something”)%&gt;在您的页面源中。或者&lt;%CodeBehindMethod()%&gt;。删除它,并有创意,以不同的方式填充它!一种方法是将ASP.NET Panel控件(如Panel ==&gt;转换为div标记,当它呈现为HTML)放到页面上并动态填充该控件的内部HTML属性。还有其他方法可以解决这个问题。

B。)你试图在你的控件中的内联脚本块中使用jQuery,你也会得到它。使用ASP.NET PlaceHolder标记环绕内联JavaScript代码块。就这么简单。如果不这样做,一些jQuery功能将起作用,但不是全部!

C。)如果您使用的是没有母版页的脚本管理器,我建议您开始使用母版页以避免以后出现问题。然后使用ASP.NET ContentPlaceHolder作为头部和body标签,以便更轻松地定制页面。当您在母版页中引用javascript文件,并且您正在使用脚本管理器时,请确保在ScriptManager标记内放置Scripts标记。然后在Scripts标记内,放置一个ScriptReference标记,其中包含Javascript文件的完整路径的Path。确保在网络应用程序的根目录的路径开头放置一个tilda和正斜杠“〜/”。许多人会将他们的ScriptManager标签放在他们的控制之下。不要这样做。把它放在你的主页!它让生活更轻松。

D。)如果A,B或C没有回答您的问题,那么我建议您删除页面的每个部分及其中的所有控件,并一次添加每个部分。如果你有一个庞大的页面和控件继承层次结构(如果你的应用程序没有主页),祝你好运!你最终会弄清楚是什么造成的。

答案 2 :(得分:0)

*答案C *的示例

===代码没有错误===

主页代码:

&lt;!DOCTYPE html PUBLIC“ - // W3C // DTD XHTML 1.0 Transitional // EN”“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">< ; meta http-equiv =“X-UA-Compatible”content =“IE = 7”/&gt;

&lt; html xmlns =“http://www.w3.org/1999/xhtml”&gt;

   &lt; title&gt; Stack Overflow示例&lt; / title&gt;

&lt; link rel =“stylesheet”type =“text / css”href =“/ style / jquery-ui-1.8.10.custom.css”&gt;

&lt; asp:ContentPlaceHolder id =“head”runat =“server”&gt; &LT; ASP:的ContentPlaceHolder&GT;

&LT; /头&GT;

&LT;身体GT;

&lt; form id =“Form1”method =“post”runat =“server”&gt;

&lt; asp:ScriptManager ID =“anything”runat =“server”&gt; &LT;脚本&GT;
&lt; asp:ScriptReference Path =“〜/ scripts / md5.js”/&gt; &lt; asp:ScriptReference Path =“〜/ scripts / jquery-1.4.4.min.js”/&gt; &lt; asp:ScriptReference Path =“〜/ scripts / jquery-ui-1.8.10.custom.min.js”/&gt; &lt; asp:ScriptReference Path =“〜/ custom_crap.js”/&gt; &LT; /脚本&GT; &LT; / ASP:的ScriptManager&GT;
&lt; asp:ContentPlaceHolder id =“body”runat =“server”&gt; &LT; / ASP:的ContentPlaceHolder&GT;

&LT; /形式&GT;

&LT; /体&GT; &LT; / HTML&GT;

=============================================== =====

页面来源:

&lt; asp:Content runat =“server”ID =“headcontent”ContentPlaceHolderID =“head”&gt; ..将您的页面特定的头文件放在这里(js,css等...) &LT; / ASP:内容和GT;

&lt; asp:Content runat =“server”ID =“bodycontent”ContentPlaceHolderID =“body”&gt; ..在此处放置您的页面特定正文HTML或ASP.NET代码 &LT; / ASP:内容和GT;