399 Stimmen

"Die Sammlung Controls kann nicht geändert werden, da das Steuerelement Codeblöcke enthält.

Ich versuche, eine einfache Benutzersteuerung zu erstellen, die ein Schieberegler ist. Wenn ich einen AjaxToolkit SliderExtender zum Benutzersteuerelement hinzufügen, erhalte ich diesen (*&$#()@# Fehler:

Server Error in '/' Application. The Controls collection cannot be modified because the control contains code blocks (i.e. `<% ... %>`). Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: The Controls collection cannot be modified because the control contains code blocks (i.e. `<% ... %>`).

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[HttpException (0x80004005): The Controls collection cannot be modified because the control contains code blocks (i.e. `<% ... %>`).]    System.Web.UI.ControlCollection.Add(Control child) +8677431    AjaxControlToolkit.ScriptObjectBuilder.RegisterCssReferences(Control control) in d:\E\AjaxTk-AjaxControlToolkit\Release\AjaxControlToolkit\ExtenderBase\ScriptObjectBuilder.cs:293 AjaxControlToolkit.ExtenderControlBase.OnLoad(EventArgs e) in d:\E\AjaxTk-AjaxControlToolkit\Release\AjaxControlToolkit\ExtenderBase\ExtenderControlBase.cs:306 System.Web.UI.Control.LoadRecursive()
+50    System.Web.UI.Control.LoadRecursive()
+141    System.Web.UI.Control.LoadRecursive()
+141    System.Web.UI.Control.LoadRecursive()
+141    System.Web.UI.Control.LoadRecursive()             
+141    System.Web.UI.Control.LoadRecursive()
+141    System.Web.UI.Control.LoadRecursive()
+141    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627

Version Information: Microsoft .NET Framework Version:2.0.50727.3074; ASP.NET Version:2.0.50727.3074

Ich habe versucht, einen Platzhalter in das Benutzersteuerelement zu setzen und das Textfeld und die Schiebereglererweiterung programmatisch zum Platzhalter hinzuzufügen, aber ich erhalte immer noch den Fehler.

Hier ist der einfache Code:

<table cellpadding="0" cellspacing="0" style="width:100%">
    <tbody>
        <tr>
            <td></td>
            <td>
                <asp:Label ID="lblMaxValue" runat="server" Text="Maximum" CssClass="float_right" />
                <asp:Label ID="lblMinValue" runat="server" Text="Minimum" />
            </td>
        </tr>
        <tr>
            <td style="width:60%;">
                <asp:CheckBox ID="chkOn" runat="server" />
                <asp:Label ID="lblPrefix" runat="server" />:&nbsp;
                <asp:Label ID="lblSliderValue" runat="server" />&nbsp;
                <asp:Label ID="lblSuffix" runat="server" />
            </td>
            <td style="text-align:right;width:40%;">                

                    <asp:TextBox ID="txtSlider" runat="server" Text="50" style="display:none;" />
                    <ajaxToolkit:SliderExtender ID="seSlider" runat="server" 
                        BehaviorID="seSlider" 
                        TargetControlID="txtSlider" 
                        BoundControlID="lblSliderValue" 
                        Orientation="Horizontal" 
                        EnableHandleAnimation="true" 
                        Length="200" 
                        Minimum="0" 
                        Maximum="100" 
                        Steps="1" />

            </td>
        </tr>
    </tbody>
</table>

Was ist das Problem?

1voto

Jesse Mwangi Punkte 159

Ich hatte das gleiche Problem mit meinem System. Ich habe den JavaScript-Code aus meiner Seite entfernt und ihn im Body-Tag kurz vor dem Schließen des Body-Tags eingefügt

1voto

Peter Punkte 1676

Ich hatte das gleiche Problem unter anderen Umständen.
Ich hatte ein einfaches Element innerhalb des body-Tags.
Das war die Lösung:

<asp:PlaceHolder ID="container" runat="server">
    <a id="child" href="<%# variable %>">Change me</a>
</asp:PlaceHolder>

protected new void Page_Load(object sender, EventArgs e)
{    
    Page.Form.DataBind(); // I neded to Call DataBind on Form not on Header
    container.InnerHtml = "Simple text";
}

1voto

Ich habe einen ähnlichen Fehler gelöst, indem ich die <script> innerhalb einer contentplaceholder innerhalb der <head> anstatt die <script> außerhalb des besagten contentplaceholder innerhalb der <head>

1voto

Mihir Punkte 8530

Ich hatte auch das gleiche Problem. Ich fand die Lösungen wie folgt.

Lösung 1: Ich habe mein Skript-Tag im Textkörper belassen.

<body>
   <form> . . . .  </form>
    <script type="text/javascript" src="<%= My.Working.Common.Util.GetSiteLocation()%>Scripts/Common.js"></script> </body>

Jetzt werden die Konflikte mit den Tags gelöst.

Lösung 2:

Wir können dies auch mit einer der oben genannten Lösungen lösen Ersetzen Sie den Codeblock durch <%# anstelle von <%= Das Problem ist jedoch, dass es nur relativer Pfad . Wenn Sie wirklich wollen absoluter Pfad wird es nicht funktionieren.

Lösung 1 funktioniert bei mir. Als nächstes haben Sie die Wahl.

1voto

desperate man Punkte 896

Ich hatte das gleiche Problem, aber es hatte nichts mit JavaScript zu tun. Betrachten Sie diesen Code:

<input id="hdnTest" type="hidden" value='<%= hdnValue %>' />
<asp:PlaceHolder ID="phWrapper" runat="server"></asp:PlaceHolder>
<asp:PlaceHolder ID="phContent" runat="server" Visible="false">
    <b>test content</b>
</asp:PlaceHolder>

In diesem Fall erhältst du denselben Fehler, obwohl PlaceHolders keine schädlichen Codeblöcke enthält. Das liegt daran, dass hdnTest Codeblöcke verwendet, die nicht zur Serversteuerung gehören.

Fügen Sie einfach runat=server zum hdnTest hinzu und das Problem ist gelöst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X