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?

284voto

Jonas Stensved Punkte 12881

Ich bin auch gerade auf dieses Problem gestoßen, habe aber eine andere Lösung gefunden.

Ich habe herausgefunden, dass das Problem gelöst wird, wenn man die Codeblöcke mit einem asp:PlaceHolder-Tag umgibt.

<asp:PlaceHolder runat="server">
  <meta name="ROBOTS" content="<%= this.ViewData["RobotsMeta"] %>" />
</asp:PlaceHolder>

(Das CMS, das ich verwende, fügt in den Kopfbereich von einem Code dahinter ein, der mich daran hindert, benutzerdefinierte Kontrollblöcke mit verschiedenen Informationen wie Meta-Tags usw. hinzuzufügen, so dass dies die einzige Möglichkeit ist, wie es für mich funktioniert).

62voto

ITalez Punkte 591

Ich kann bestätigen, dass das Verschieben von javascript mit <% %> Tags vom Kopf zum Formular-Tag behebt diesen Fehler

http://italez.wordpress.com/2010/06/22/ajaxcontroltoolkit-calendarextender-e-strana-eccezione/

34voto

Anup Punkte 331

Platzieren Sie das Javascript unter einem div-Tag.

<div runat="server"> //div tag must have runat server
  //Your Jave script code goes here....
</div>

Es wird klappen!!

9voto

Mohan Prajapati Punkte 91

Sie können die gleiche Funktion nutzen, wenn Sie den Skriptmanager auf Ihrer Seite verwenden. Sie müssen das Skript nur wie folgt registrieren

<asp:ScriptManager ID="ScriptManager1" runat="server" LoadScriptsBeforeUI="true"   EnablePageMethods="true">  
<Scripts>
      <asp:ScriptReference Path="~/Styles/javascript/jquery.min.js" />
</Scripts>
</asp:ScriptManager>

6voto

Nick Punkte 61

Ich habe es mit <%# %> ohne Erfolg. Dann habe ich geändert Page.Header.DataBind(); in meinem Code hinter zu this.Header.DataBind(); und es hat gut funktioniert.

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