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

本文关键字:控件 因为 包含 代码 集合 修改 | 更新日期: 2023-09-27 18:15:14

这与所有其他问题有点不同,因为它们似乎都专门指头部内容。有了这个,我有一个带有以下占位符的用户控件:

<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);

抛出错误:

控件集合不能修改,因为该控件包含代码块(即<%…)%>)。

FooterControl.Controls.Add(DiscussIncludes);行。我试过将占位符内的所有<%=更改为<%#,但没有运气。

需要注意的一点是,这个控件在我的所有其他页面上都工作得很好。你知道是什么引起的吗?

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

这个控件中没有任何东西会导致问题——如果当您将控件添加到特定环境并且仅该环境指向问题时发生这种情况。投诉页面上是怎么回事?

我在我的系统上尝试了以下操作,似乎可以正常工作…

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