控件集合无法修改,因为控件包含代码块(即 <% ... %>)
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】:错误是合乎逻辑的,使用<%= %>
渲染后,您不能混淆渲染的控件
解决此问题的一种方法是使用文字控件,并将脚本行呈现在代码后面。
<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