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?

5voto

Ich hatte dasselbe Problem in der Benutzerkontrolle. Meine Seite, auf der das Steuerelement gehostet wurde, hatte Kommentare im Head-Tag, ich entfernte diese Kommentare, danach funktionierte alles. In einigen Beiträgen wird auch vorgeschlagen, Skripte aus dem head-Tag zu entfernen und sie im body-Tag zu platzieren.

4voto

Iori-kyo Punkte 349

In meinem Fall habe ich Folgendes ersetzt <%= %> con <%# %> und es hat funktioniert!

3voto

Vikash pathak Punkte 59

Behalten Sie den Java-Script-Code innerhalb des Body-Tags

<body> 
   <script type="text/javascript">
   </script>
</body>

2voto

bcr Punkte 1786

Ich hatte dieses Problem, aber nicht über die Kopfzeile. Mein Platzhalter war im Body. Ich ersetzte also alle <%= con <%# und hat

protected void Page_Load(object sender, EventArgs e)
{
    Page.Header.DataBind();    
}

und es hat funktioniert.

2voto

perryv Punkte 114

Die "<%#"-Datenbindungstechnik funktioniert nicht direkt innerhalb von <link>-Tags im <head>-Tag:

<head runat="server">

  <link rel="stylesheet" type="text/css" 
        href="css/style.css?v=<%# My.Constants.CSS_VERSION %>" />

</head>

Der obige Code wird ausgewertet zu

<head>

  <link rel="stylesheet" type="text/css" 
        href="css/style.css?v=&lt;%# My.Constants.CSS_VERSION %>" />

</head>

Stattdessen sollten Sie wie folgt vorgehen (beachten Sie die beiden Anführungszeichen darin):

<head runat="server">

  <link rel="stylesheet" type="text/css" 
        href="css/style.css?v=<%# "" + My.Constants.CSS_VERSION %>" />

</head>

Und Sie werden das gewünschte Ergebnis erhalten:

<head>

  <link rel="stylesheet" type="text/css" href="css/style.css?v=1.5" />

</head>

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