Коллекция Controls не может быть изменена, потому что элемент управления содержит блоки кода - PullRequest
1 голос
/ 21 ноября 2011

Это немного отличается от всех остальных вопросов, так как все они, похоже, относятся конкретно к содержанию заголовка.С этим у меня есть пользовательский элемент управления со следующим заполнителем:

<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);.Я попытался изменить все <%= на <%# в заполнителе, но не повезло.

Следует отметить, что этот элемент управления отлично работает на всех других моих страницах.Есть идеи, что может быть причиной этого?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2011

Я попробовал следующее в моей системе, и, похоже, оно работает ...

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

Я получаю исключение, если пытаюсь добавить элемент управления в DiscussInclude. Однако, если добавить элемент управления в JsIncludes, он работает. Элемент управления JsInclude является дочерним заполнителем DiscussInclude.

0 голосов
/ 21 ноября 2011

Ничто в этом элементе управления не вызывает проблемы - если это происходит, когда вы добавляете элемент управления в определенную среду и только в ту среду, которая указывает на проблему. Что происходит на странице жалоб?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...