it-swarm.com.de

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

Ich versuche, ein einfaches Benutzersteuerelement zu erstellen, das ein Schieberegler ist. Wenn ich dem Benutzersteuerelement einen AjaxToolkit SliderExtender hinzufüge, wird der folgende Fehler (* & $ # () @ #) angezeigt:

    Serverfehler in '/' Anwendung. Die Controls-Auflistung kann nicht geändert werden, da das Steuerelement Codeblöcke (d. H. ``) Enthält. Beschreibung: Während der Ausführung der aktuellen Webanforderung ist eine nicht behandelte Ausnahme aufgetreten. Überprüfen Sie die Stapelablaufverfolgung auf weitere Informationen zu dem Fehler und dem Ursprung im Code. 
 
 Ausnahmedetails: System.Web.HttpException: Die Controls-Auflistung kann nicht geändert werden, da das Steuerelement Codeblöcke enthält (dh ``). 
 
 Quellfehler: 
 
 Während der Ausführung der aktuellen Webanforderung wurde eine nicht behandelte Ausnahme generiert. Informationen zu Ursprung und Speicherort der Ausnahme können mithilfe des folgenden Ausnahmestapel-Trace ermittelt werden. 
 
 Stapel-Trace: 
 
 [HttpException (0x80004005): Die Steuerelemente Die Auflistung kann nicht geändert werden, da das Steuerelement Codeblöcke enthält (dh ``).] System.Web.UI.ControlCollection.Add (untergeordnetes Steuerelement) +8677431 AjaxControlToolkit.ScriptObjectBuilder.RegisterCssReferences (Steuerelement) in d:\E\AjaxTk-AjaxControlToolkit\Release\AjaxControlToolkit\ExtenderBase\ScriptObjectBuilder.cs: 293 AjaxControlToolkit.ExtenderControlBase.OnLoad (EventArgs e) unter d:\E\AjaxTk-AjaxControlToolkit\Release\AjaxControlToolkit\ExtenderBase\AjaxControlToolkit\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 Sy stem.Web.UI.Control.LoadRecursive () 
 +141 System.Web.UI.Control.LoadRecursive () 
 +141 System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627 
 
 
 Versionsinformationen: Microsoft .NET Framework Version: 2.0.50727.3074; ASP.NET Version: 2.0.50727.3074 

Ich habe versucht, einen Platzhalter in das Benutzersteuerelement einzufügen und das Textfeld und den Slider-Extender programmgesteuert dem Platzhalter hinzuzufügen. Die Fehlermeldung wird weiterhin angezeigt.

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>

Worin besteht das Problem?

362
Daniel P

Starten Sie zuerst den Codeblock mit <% # anstelle von <% =:

<head id="head1" runat="server">
  <title>My Page</title>
  <link href="css/common.css" rel="stylesheet" type="text/css" />
  <script type="text/javascript" src="<%# ResolveUrl("~/javascript/leesUtils.js") %>"></script>
</head>

Dadurch wird der Codeblock von einem Response.Write-Codeblock in einen Datenbindungsausdruck geändert.
Da <%# ... %> Datenbindungsausdrücke keine Codeblöcke sind, wird sich die CLR nicht beschweren. Dann fügen Sie im Code für die Masterseite Folgendes hinzu:

protected void Page_Load(object sender, EventArgs e)
{
  Page.Header.DataBind();    
}
485
Jalal El-Shaer

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

Ich habe festgestellt, dass das Umschließen der Codeblöcke mit einem asp: PlaceHolder-Tag das Problem löst.

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

(Das von mir verwendete CMS fügt einen Code in den Head-Bereich ein, hinter dem ich keine benutzerdefinierten Steuerblöcke mit verschiedenen Informationen wie Meta-Tags usw. hinzufügen kann. Dies ist also die einzige Möglichkeit, die für mich funktioniert.)

244
Jonas Stensved

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

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

52
ITalez

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 !!

31
Anup

sie können die gleiche Funktion ausführen, wenn Sie den Skript-Manager auf Ihrer Seite verwenden. Sie müssen das Skript einfach so registrieren

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

Ich hatte das gleiche Problem in der Benutzersteuerung. Meine Seite, auf der sich das Steuerelement befand, enthielt Kommentare im Head-Tag. Diese Kommentare wurden entfernt. Danach funktionierte alles. In einigen Beiträgen wird auch vorgeschlagen, Skripte aus dem Kopf zu entfernen und im Hauptteil abzulegen.

5
Shafeeq

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

4
Iori-kyo

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

4
Nick

Bewahren Sie den Skriptcode Java im Tag body auf

<body> 
   <script type="text/javascript">
   </script>
</body>
2
Vikash pathak

Die Datenbindungstechnik "<% #" funktioniert nicht direkt in <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 zu ausgewertet

<head>

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

</head>

Stattdessen sollten Sie Folgendes tun (beachten Sie die zwei Anführungszeichen im Inneren):

<head runat="server">

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

</head>

Und Sie erhalten das gewünschte Ergebnis:

<head>

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

</head>
2
perryv

Ich hatte dieses Problem, aber nicht über den Header. Mein Platzhalter war im Körper. Also habe ich alle <%= durch <%# ersetzt und getan

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

und es hat funktioniert.

2
bcr

Alternativ können Sie eine andere ASPX-Seite als die Seite verwenden, zu der Sie einen Link erstellen möchten.

So sieht der Header der Masterseite aus:

<head runat="server">
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
    <link href="CSS/AccordionStyles.aspx" rel="stylesheet" type="text/css" />
</head>

Das referenzierte ASPX-Formular enthält Ihren Inhalt:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AccordionStyles.aspx.cs" Inherits="IntranetConnectCMS.CSS.AccordionStyles" %>
.AccordionHeader
{
    cursor: pointer;
    background-image: url(<%=ResolveUrl("~/Images/Backgrounds/AccordionPaneHeaderClosed.png") %>);
    background-repeat: no-repeat;
}

.AccordionHeaderSelected
{
    cursor: pointer;
    background-image: url(<%=ResolveUrl("~/Images/Backgrounds/AccordionPaneHeaderOpen.png") %>);
    background-repeat: no-repeat;
}
.AccordionContent
{
    background-image: url(<%=ResolveUrl("~/Images/Backgrounds/AccordionPaneContent.png") %>);
    background-repeat: no-repeat;
}

Schließlich benötigen Sie die ASPX-Seite, um dem Browser mitzuteilen, dass Sie CSS-Inhalte senden:

protected void Page_Load(object sender, EventArgs e)
{
    Response.ContentType = "text/css";
}
1
Hugo

Ich hatte das gleiche Problem mit unterschiedlichen Umständen.
Ich hatte ein einfaches Element im Body-Tag.
Die Lösung war:

<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";
}
1
Peter

Ich hatte das gleiche Problem mit meinem System. Ich entfernte den JavaScript-Code von meiner Seite und legte ihn kurz vor dem Schließen des Body-Tags auf body

1
Jesse Mwangi

Ich stand auch vor dem gleichen Problem. Ich fand die Lösungen wie folgt.

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

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

Nun werden Konflikte bezüglich der Tags gelöst.

Lösung 2:

Wir können auch diese eine der obigen Lösungen lösen wie Ersetzen Sie den Codeblock durch <% # anstelle von <% = Aber das Problem ist, dass es nur relativer Pfad gibt. Wenn Sie wirklich absoluter Pfad wollen, wird es nicht funktionieren.

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

1
Mihir

Ich habe einen ähnlichen Fehler behoben, indem ich den <script> in einen contentplaceholder in den <head> eingefügt habe, anstatt den <script> außerhalb des besagten contentplaceholder in den <head>

1

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 dieser Situation wird derselbe Fehler angezeigt, obwohl PlaceHolders keine schädlichen Codeblöcke enthalten. Dies liegt daran, dass hdnTest Codeblöcke verwendet, die nicht dem Server zugeordnet sind.

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

1
desperate man

In meinem Fall habe ich diesen Fehler erhalten, weil ich InnerText fälschlicherweise auf ein div mit HTML darin gesetzt habe.

Beispiel:

SuccessMessagesContainer.InnerText = "";

   <div class="SuccessMessages ui-state-success" style="height: 25px; display: none;" id="SuccessMessagesContainer" runat="server">
      <table>
         <tr>
            <td style="width: 80px; vertical-align: middle; height: 18px; text-align: center;">
               <img src="<%=Image_success_icn %>" style="margin: 0 auto; height: 18px;
                  width: 18px;" />
            </td>
            <td id="SuccessMessage" style="vertical-align: middle;" class="SuccessMessage" runat="server" >
            </td>
         </tr>
      </table>
   </div>
0
live-love

Entfernen Sie den Teil mit den Server-Tags und platzieren Sie ihn an einer anderen Stelle, wenn Sie dynamische Steuerelemente aus dem dahinter liegenden Code hinzufügen möchten

Ich habe mein JavaScript aus dem Kopfbereich der Seite entfernt, es dem Hauptteil der Seite hinzugefügt und zum Laufen gebracht

0
victor

Versuchen Sie, Ihren Java - Skriptcode außerhalb des Head-Tags zu schreiben. Dies funktioniert auf jeden Fall. Es wird behoben, wenn ich meinen Java - Skriptcode kopiere und am Ende der Seite einfüge. Im vorherigen Tag wird es jetzt in HEAD platziert, kurz bevor das Formular-Tag geschlossen wird.

    </div>
        <script>
                    function validate() {
                        try {

                        var username = document.getElementById("<%=txtUserName.ClientID%>").value;
                        var password = document.getElementById("<%=txtPWD.ClientID%>").value;

                            if (username == "" && password == "")
                                alert("Enter Username and Passowrd");
                            else {
                                if (username == "")
                                    alert("Enter Username");
                                else if (password == "")
                                    alert("Enter Password");
                            }

                        }

                    catch (err) {
                    }
                }
                </script>
</form>
0
Miank

In einigen Fällen funktionieren ResolveUrl und ResolveClientUrl, jedoch nicht immer, insbesondere bei js-Skriptdateien. Was passiert, ist, dass es für einige Seiten funktioniert, aber wenn Sie zu anderen Seiten navigieren, funktioniert es möglicherweise aufgrund des relativen Pfads dieser bestimmten Seite nicht.

Schließlich ist mein Vorschlag, immer eine vollständige Überprüfung der Seiten Ihrer Website durchzuführen, um festzustellen, ob alle Ihre JavaScript-Verweise in Ordnung sind oder nicht. Öffnen Sie Ihre Site in Google Chrome -> Klicken Sie mit der rechten Maustaste auf die Seite -> Klicken Sie auf Quellseite anzeigen -> HTML wird angezeigt -> Klicken Sie jetzt auf Ihre JS-Hyperlinks. Wenn es funktioniert, sollte es die js-Datei in einem anderen Browserfenster öffnen, sonst wird es nicht geöffnet.

0
mdhameed