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

Posted

技术标签:

【中文标题】控件集合无法修改,因为控件包含代码块(即 <% ... %>)【英文标题】:The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>) 【发布时间】:2011-10-10 02:46:57 【问题描述】:

我遇到了这个错误并找到了解决方法,并且解决方案对我有用,但我想知道这是解决问题的最佳方法,我想确保它不会严重影响任何其他页面.希望高手帮忙。 如果这是最好的解决方案,那么你们中的许多人都可以省心。

将代码块放置在 MasterPage 中时会发生此错误。将代码块放在占位符中以解决问题。将 AJAX 扩展程序添加到您的网页时,它将尝试在头部注册脚本。如果 MasterPage 中存在代码块,则可能会发生错误。

要解决此问题,只需将代码块移动到 MasterPage 头部的占位符中,如下所示:

<head id="Head1" runat="server">
    <title>Untitled Page</title>
    <link href="StyleSheet.css" rel="stylesheet" type="text/css" />
    <asp:ContentPlaceHolder ID="myPlaceholder" runat="server">
    <script language="javascript" type="text/javascript" src="<%= Page.ResolveClientURL("~/javascript/global.js")%>"></script>
    </asp:ContentPlaceHolder>
    <asp:ContentPlaceHolder ID="head" runat="server"></asp:ContentPlaceHolder>
</head>

【问题讨论】:

【参考方案1】:

错误是合乎逻辑的,使用&lt;%= %&gt;渲染后,您不能混淆渲染的控件

解决此问题的一种方法是使用文字控件,并将脚本行呈现在代码后面。

<asp:ContentPlaceHolder ID="myPlaceholder" runat="server">
    <asp:Literal runat="server" ID="txtIncludeScript" EnableViewState="false"></asp:Literal>
</asp:ContentPlaceHolder>

以及后面的代码。检查 null 因为如果您更改占位符,则文字为 null。还要设置 EnableViewState=false,因为您在每个 Page_Load 上都设置了它,并且您不希望将其保存到视图状态。

  if(txtIncludeScript != null)
  
    txtIncludeScript.Text = 
string.Format("<script language=\"javascript\" type=\"text/javascript\" src=\"0\"></script>",   
Page.ResolveClientUrl("~/javascript/global.js"));
  

【讨论】:

感谢您的回复,实际上我已将所有脚本标签放入内容占位符中,并且可以正常工作。与 无关..再次感谢您提供的信息。 :) @tnu ok 删除占位符并按照我说的进行。我也是这样用的。 好的,我会尽力让你知道 :)【参考方案2】:

ContentPlaceHolder 需要母版页,因此您可以将该标记替换为可以在服务器上运行的其他元素,以防您的页面没有母版页并且您无法摆脱

<head id="Head1" runat="server">
 <title>Untitled Page</title>
 <link href="StyleSheet.css" rel="stylesheet" type="text/css" />
 <div runat="server">
  <script language="javascript" type="text/javascript" src="<%= Page.ResolveClientURL("~/javascript/global.js")%>"></script>
 </div>
 <asp:ContentPlaceHolder ID="head" runat="server"></asp:ContentPlaceHolder>
</head>

【讨论】:

以上是关于控件集合无法修改,因为控件包含代码块(即 <% ... %>)的主要内容,如果未能解决你的问题,请参考以下文章

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

无法修改 Controls 集合,因为控件包含代码块(即 <% ... %> ),动态添加具有 Masterpages 的控件

asp.net c# javascript 控件集合无法修改,因为控件包含代码块(即<% ... %>)

在服务器端控件中使用 <%= %> 会导致无法修改 Controls 集合,因为控件包含代码块(即 <% ... %>)

无法修改 Controls 集合,因为该控件包含代码块(即 <% ... %>)。Telerik.Web.UI.RadAjaxControl.MoveUpdatePanel

无法修改 Controls 集合,因为该控件包含代码块(即 <% ...%>)ajax 工具包 html 编辑器