“La collezione Control non può essere modificata perché il controllo contiene blocchi di codice”

Sto cercando di creare un semplice controllo utente che sia un dispositivo di scorrimento. Quando aggiungo un AjaxToolkit SliderExtender al controllo utente, ottengo questo errore (* e $ # () @ #:

     Errore del server nell'applicazione '/'  La collezione Controls non può essere modificata perché il controllo contiene blocchi di codice (cioè ``).  Descrizione: si è verificata un'eccezione non gestita durante l'esecuzione della richiesta Web corrente.  Si prega di rivedere la traccia dello stack per ulteriori informazioni sull'errore e sulla sua origine nel codice.

     Dettagli eccezione: System.Web.HttpException: la collezione Controls non può essere modificata perché il controllo contiene blocchi di codice (cioè ``).

     Errore di origine:

     Un'eccezione non gestita è stata generata durante l'esecuzione della richiesta web corrente.  Le informazioni relative all'origine e alla posizione dell'eccezione possono essere identificate utilizzando la traccia dello stack di eccezioni di seguito.

     Stack Trace:

     [HttpException (0x80004005): la collezione Controls non può essere modificata perché il controllo contiene blocchi di codice (es. ``).] System.Web.UI.ControlCollection.Add (Figlio di controllo) +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


     Informazioni sulla versione: Versione Microsoft .NET Framework: 2.0.50727.3074;  Versione ASP.NET: 2.0.50727.3074

Ho provato a inserire un segnaposto nel controllo utente e ad aggiungere la casella di testo e l’estensore del cursore al segnaposto a livello di codice e ottengo ancora l’errore.

Ecco il codice semplice:

:  

Qual è il problema?

Innanzitutto, avvia il blocco di codice con <% # anziché <% =:

  My Page    

Ciò modifica il blocco di codice da un blocco di codice Response.Write a un’espressione di associazione dati.
Poiché le espressioni di associazione <%# ... %> non sono blocchi di codice, il CLR non si lamenterà. Quindi nel codice per la pagina master, devi aggiungere quanto segue:

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

Mi sono imbattuto in questo problema, ma ho trovato un’altra soluzione.

Ho trovato che il wrapping dei blocchi di codice con un asp: PlaceHolder-tag risolve il problema.

  " />  

(Il CMS che sto usando si sta inserendo nella sezione principale da un codice dietro il quale mi ha impedito di aggiungere blocchi di controllo personalizzati con varie informazioni come meta-tag ecc. Quindi questo è l’unico modo in cui funziona per me.)

Posso confermare che lo spostamento del javascript con i <% %> dalla testina al tag form corregge questo errore

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

Inserisci il javascript sotto un tag div.

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

Funzionerà !!

puoi fare la stessa funzionalità se usi la gestione script nella tua pagina. devi solo registrare lo script in questo modo

      

Ho avuto lo stesso problema nel controllo utente. La mia pagina che ospitava il controllo aveva commenti nel tag head, ho rimosso quei commenti, tutto ha funzionato in seguito. Alcuni post suggeriscono anche di rimuovere gli script dalla testa e di posizionarli nel corpo.

Ho provato a usare <%# %> senza successo. Quindi ho cambiato Page.Header.DataBind(); nel mio codice dietro a this.Header.DataBind(); e ha funzionato bene.

Nel mio caso, ho sostituito <%= %> con <%# %> , e ha funzionato!

La tecnica di associazione dati “<% #" non funzionerà direttamente all'interno dei tag nel tag :

    

Il codice sopra valuterà a

    

Invece, dovresti fare quanto segue (nota le due virgolette interne):

  " />  

E otterrai il risultato desiderato:

    

Mantieni il codice java script all’interno del tag body

    

Ho avuto questo problema, ma non tramite l’intestazione. Il mio segnaposto era nel corpo. Così ho sostituito tutti i <%= con <%# e fatto

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

e ha funzionato.

Un modo alternativo consiste nel fare in modo che un’altra pagina .aspx funga da pagina a cui si desidera colbind.

Questo è l’aspetto dell’intestazione della Masterpage:

      

Il modulo .aspx di riferimento contiene i tuoi contenuti:

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

Infine, hai bisogno della pagina .aspx per comunicare al browser che stai inviando contenuti CSS:

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

Ho anche affrontato lo stesso problema. Ho trovato le soluzioni come seguire.

Soluzione 1: ho mantenuto il mio tag script nel corpo.

  
. . . .

Ora si risolvono i conflitti relativi ai tag.

Soluzione 2:

Possiamo anche risolvere questa soluzione come Sostituisci il blocco di codice con <% # invece di <% = Ma il problema è che fornirà solo un percorso relativo . Se vuoi un percorso veramente assoluto, non funzionerà.

La soluzione 1 funziona per me. La prossima è la tua scelta.

Ho avuto lo stesso problema, ma non aveva nulla a che fare con JavaScript. Considera questo codice:

    test content  

In questa situazione si avrà lo stesso errore anche se PlaceHolders non ha blocchi di codice dannosi, succede a causa del controllo non server hdnTest utilizza blocchi di codice.

Basta aggiungere runat = server al hdnTest e il problema è risolto.

Ho risolto un errore simile a ciò inserendo lo all'interno di un contentplaceholder all'interno di invece di mettere lo all'esterno di detto contentplaceholder all'interno di

Ho avuto lo stesso problema con il mio sistema, ho rimosso il codice JavaScript dalla mia pagina e l’ho messo sul corpo appena prima di chiudere il body tag

Per alcuni casi ResolveUrl e ResolveClientUrl funzionano ma non tutte le volte, specialmente nel caso di file di script js. Quello che succede è che funziona per alcune pagine ma quando si naviga su altre pagine potrebbe non funzionare a causa del percorso relativo di quella particolare pagina.

Quindi, alla fine il mio suggerimento è sempre di fare un controllo completo delle pagine del tuo sito per verificare se tutti i tuoi riferimenti javascript siano soddisfacenti o meno. Apri il tuo sito in Google Chrome -> fai clic con il tasto destro sulla pagina -> fai clic su Visualizza pagina sorgente -> HTML appare -> fai clic sui tuoi hyperlink JS; se funziona correttamente dovrebbe aprire il file js in un’altra finestra del browser, altrimenti non si aprirà.

Prova a scrivere il tuo codice java script al di fuori del tag head che funzionerà sicuramente. È risolto quando copio e incollo il mio codice Java Script nella parte inferiore della pagina. Nel precedente è stato inserito nel tag HEAD ora prima di chiudere il tag del modulo.

     

Rimuovi la parte che contiene i tag del server e posizionala da qualche altra parte se desideri aggiungere controlli dinamici dal codice sottostante

Ho rimosso il mio JavaScript dalla sezione principale della pagina e l’ho aggiunto al corpo della pagina e ho funzionato

Nel mio caso ho ricevuto questo errore perché avevo erroneamente impostato InnerText su un div con html al suo interno.

Esempio:

 SuccessMessagesContainer.InnerText = "";  

Ho avuto lo stesso problema con diverse circostanze.
Ho avuto un elemento semplice all’interno del tag del corpo.
La soluzione era:

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

I tag <%= %> non funzionano in un tag con runat="server" . Sposta il tuo codice con <%= %> in runat="server" in un altro tag ( body , head , …), o rimuovi runat="server" dal contenitore.