这与所有其他问题略有不同,因为它们似乎都特别提到了头部内容。有了这个,我有一个用户控件使用以下占位符:
<asp:PlaceHolder runat="server" ID="DiscussIncludes">
<script>
var OnLastPage = <asp:Literal runat="server" ID="OnLastPageJS" />;
var AJAXWait = false;
var MinChars = <%=Settings.MinimumCommentChars%>;
var AJAXURL = "<%=ResolveClientUrl("~/Handlers/DiscussAjaxHandler.ashx")%>";
var CurrUsername = "<%=ThisUser.Username %>";
var GravHash = "<asp:Literal runat="server" ID="GravJSRef" />";
var RelURL = "<%=ResolveClientUrl("~/users/")%>";
var Anch = "<%=Anchor.ToString()%>";
var MyRep = "<%=MyRepString%>";
var CurrReportID = 0;
var LastPageURL = "<asp:Literal runat="server" ID="JSLastPageURL" />";
var AllowedChars = <%=Settings.MaxCommentChars %>;
</script>
<script src="<%=CommonFunctions.AllocateStaticPath("/js/Discuss.js?v=" + Settings.JSVersionID)%>"></script>
<script src="<%=CommonFunctions.AllocateStaticPath("/js/BlockUI.js?v=" + Settings.JSVersionID)%>"></script>
</asp:PlaceHolder>
在我背后的代码中:
ContentPlaceHolder FooterControl = (ContentPlaceHolder)Page.Master.FindControl("JavascriptIncludes");
FooterControl.Controls.Add(DiscussIncludes);
这会引发错误:
无法修改Controls集合,因为该控件包含代码块(即&lt;%...%&gt;)。
在FooterControl.Controls.Add(DiscussIncludes);
行。我已尝试将占位符中的所有<%=
更改为<%#
,但没有运气。
需要注意的一点是,此控件在我的所有其他页面上都能正常工作。会有什么想法导致这个?
答案 0 :(得分:0)
此控件中没有任何内容导致问题 - 如果在将控件添加到特定环境时发生,并且只有该环境指向该问题。抱怨页面上发生了什么?
答案 1 :(得分:0)
我在我的系统上尝试了以下操作,它似乎正在工作......
<asp:PlaceHolder runat="server" ID="DiscussIncludes">
<script type="text/javascript">
var path = <%=Common.path%>;
</script>
<script type="text/javascript" src='<%=Common.GetScriptPath("jquery-1.4.1-vsdoc.js")%>'></script>
<asp:PlaceHolder runat="server" ID="JsIncludes">
</asp:PlaceHolder>
</asp:PlaceHolder>
代码背后......
LiteralControl include = new LiteralControl(string.Format("<script src='{0}'></script>", Common.GetScriptPath("jquery-1.4.1.min.js")));
JsIncludes.Controls.Add(include);
如果我尝试将控件添加到DiscussIncludes,我会得到异常。但是,如果将控件添加到JsIncludes它可以工作。 JsIncludes控件是DiscussIncludes的子占位符。