无法修改Controls集合,因为控件包含代码块

时间:2011-11-21 12:31:34

标签: c# asp.net .net user-controls

这与所有其他问题略有不同,因为它们似乎都特别提到了头部内容。有了这个,我有一个用户控件使用以下占位符:

<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);行。我已尝试将占位符中的所有<%=更改为<%#,但没有运气。

需要注意的一点是,此控件在我的所有其他页面上都能正常工作。会有什么想法导致这个?

2 个答案:

答案 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的子占位符。