“La collection Controls ne peut pas être modifiée car le contrôle contient des blocs de code”

J’essaie de créer un contrôle utilisateur simple qui est un curseur. Lorsque j’ajoute un AjaxToolkit SliderExtender au contrôle de l’utilisateur, j’obtiens cette erreur (* & $ # () @ #:

     Erreur serveur dans l'application '/'  La collection Controls ne peut pas être modifiée car le contrôle contient des blocs de code (c.-à-d. ``).  Description: une exception non gérée s'est produite lors de l'exécution de la demande Web en cours.  Consultez la trace de la stack pour plus d'informations sur l'erreur et son origine dans le code.  Détails de l'exception: System.Web.HttpException: la collection Controls ne peut pas être modifiée car le contrôle contient des blocs de code (c'est-à-dire ``).  Erreur source: une exception non gérée a été générée lors de l'exécution de la demande Web en cours.  Les informations concernant l'origine et l'emplacement de l'exception peuvent être identifiées à l'aide de la trace de stack d'exception ci-dessous.  Trace de la stack: [HttpException (0x80004005): la collection Controls ne peut pas être modifiée car le contrôle contient des blocs de code (c.-à-d. ``). System.Web.UI.ControlCollection.Add (enfant de contrôle) contrôle) dans d: \ E \ AjaxTk-AjaxControlToolkit \ Release \ AjaxControlToolkit \ ExtenderBase \ ScriptObjectBuilder.cs: 293 AjaxControlToolkit.ExtenderControlBase.OnLoad (EventArgs e) dans 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 (booléen includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627 Informations sur la version: Microsoft .NET Framework  Version: 2.0.50727.3074;  Version ASP.NET: 2.0.50727.3074 

J’ai essayé de mettre un espace réservé dans le contrôle utilisateur et d’append l’extension textbox et slider à l’espace réservé par programme et je reçois toujours l’erreur.

Voici le code simple:

:  

Quel est le problème?

    Commencez par démarrer le bloc de code avec <% # au lieu de <% =:

      My Page    

    Cela modifie le bloc de code d’un bloc de code Response.Write en une expression de liaison de données.
    Comme les expressions de liaison de données <%# ... %> ne sont pas des blocs de code, le CLR ne s’en plaindra pas. Ensuite, dans le code de la page maître, vous ajoutez les éléments suivants:

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

    Je viens aussi de rencontrer ce problème mais j’ai trouvé une autre solution.

    J’ai trouvé que l’habillage des blocs de code avec un asp: PlaceHolder-tag résout le problème.

      " />  

    (Le CMS que j’utilise insère dans la section principale d’un code derrière moi, ce qui m’a empêché d’append des blocs de contrôle personnalisés avec diverses informations telles que les méta-tags, etc. C’est donc la seule façon de travailler pour moi.)

    Je peux confirmer que le fait de déplacer le javascript avec les balises <% %> %% <% %> de la tête vers la balise de formulaire corrige cette erreur.

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

    Placez le javascript sous une balise div.

     
    //div tag must have runat server //Your Jave script code goes here....

    Ça marchera !!

    vous pouvez faire la même fonctionnalité si vous utilisez le gestionnaire de scripts dans votre page. vous devez simplement enregistrer le script comme ça

          

    J’ai eu le même problème dans le contrôle de l’utilisateur. Ma page qui hébergeait le contrôle avait des commentaires dans la balise head, j’ai supprimé ces commentaires, tout fonctionnait par la suite. Certains messages suggèrent également de supprimer les scripts de la tête et de les placer dans le corps.

    J’ai essayé d’utiliser <%# %> sans succès. Puis j’ai changé Page.Header.DataBind(); dans mon code derrière this.Header.DataBind(); et ça marchait bien.

    Dans mon cas, j’ai remplacé <%= %> par <%# %> , et cela a fonctionné!

    La technique de liaison de données “<% #" ne fonctionnera pas directement dans les balises de la balise :

        

    Le code ci-dessus évaluera à

        

    Au lieu de cela, vous devriez faire ce qui suit (notez les deux guillemets à l’intérieur):

      " />  

    Et vous obtiendrez le résultat souhaité:

        

    Gardez le code de script java à l’intérieur de la balise body

        

    J’ai eu ce problème, mais pas via l’en-tête. Mon espace réservé était dans le corps. J’ai donc remplacé tous les <%= par <%# et

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

    et ça a fonctionné.

    Une autre solution consiste à utiliser une autre page .aspx comme page à laquelle vous souhaitez créer un lien.

    Voici à quoi ressemble l’en-tête de la page principale:

          

    Le formulaire .aspx référencé contient votre contenu:

     <%@ 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; } 

    Enfin, vous avez besoin de la page .aspx pour indiquer au navigateur que vous envoyez du contenu CSS:

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

    J’ai également fait face au même problème. J’ai trouvé les solutions comme suivre.

    Solution 1: J’ai gardé ma balise script dans le corps.

      
    . . . .

    Maintenant, les conflits concernant les balises seront résolus.

    Solution 2:

    Nous pouvons également résoudre cette des solutions ci-dessus, comme Remplacer le bloc de code par <% # au lieu de <% = Mais le problème est qu’il ne donnera que le chemin relatif . Si vous voulez vraiment un chemin absolu, ça ne marchera pas.

    La solution 1 fonctionne pour moi. Suivant est votre choix.

    J’ai eu le même problème, mais cela n’avait rien à voir avec JavaScript. Considérez ce code:

        test content  

    Dans cette situation, vous obtiendrez la même erreur même si les PlaceHolders ne contiennent pas de blocs de code dangereux, car le contrôle non-serveur hdnTest utilise des blocs de code.

    Ajoutez simplement runat = server à hdnTest et le problème est résolu.

    J’ai résolu une erreur similaire en plaçant le dans un contentplaceholder à l'intérieur du au lieu de placer le dehors dudit contentplaceholder à l'intérieur du

    J’ai eu le même problème avec mon système, j’ai supprimé le code JavaScript de ma page et l’ai mis au corps juste avant de fermer la balise body

    Dans certains cas, ResolveUrl et ResolveClientUrl fonctionnent, mais pas toujours, surtout dans le cas des fichiers de script js. Qu’est-ce qui se passe, il fonctionne pour certaines pages, mais lorsque vous naviguez vers d’autres pages, il peut ne pas fonctionner en raison du chemin relatif de cette page particulière.

    Donc, finalement, je vous conseille de toujours vérifier à nouveau toutes les pages de votre site pour savoir si toutes vos références JavaScript sont correctes ou non. Ouvrez votre site dans Google Chrome -> cliquez avec le bouton droit sur la page -> cliquez sur afficher la page source -> le code HTML apparaît -> cliquez maintenant sur vos hyperliens JS; Si cela fonctionne bien, il devrait ouvrir le fichier js dans une autre fenêtre du navigateur, sinon il ne s’ouvrira pas.

    Essayez d’écrire votre code de script Java en dehors de la balise head, cela fonctionnera certainement. Il est résolu lorsque je copie et collez mon code de script Java au bas de la page. Dans le précédent, il est placé dans la balise HEAD maintenant juste avant de fermer la balise de formulaire.

         

    Supprimez la partie qui a des balises de serveur et placez-la ailleurs si vous souhaitez append des contrôles dynamics à partir du code

    J’ai retiré mon JavaScript de la section principale de la page et l’ai ajouté au corps de la page pour le faire fonctionner

    Dans mon cas, j’ai cette erreur parce que je définissais à tort InnerText en div avec html à l’intérieur.

    Exemple:

     SuccessMessagesContainer.InnerText = "";  

    J’ai eu le même problème avec des circonstances différentes.
    J’avais un élément simple dans la balise body.
    La solution était:

      Change me  
     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"; } 

    Tags <%= %> ne fonctionne pas dans un tag avec runat="server" . Déplacez votre code avec <%= %> dans runat="server" vers une autre balise ( body , head , …), ou supprimez runat="server" du conteneur.