La raccolta Controls non può essere modificata perché il controllo contiene blocchi di codice (cioè )

Sto cercando di creare meta tag dinamici in C # ma dà il seguente errore:

La raccolta Controls non può essere modificata perché il controllo contiene blocchi di codice (cioè )

Questo è il codice che ho aggiunto:

HtmlMeta meta = new HtmlMeta(); meta.Name = "keywords"; meta.Content = "book,paper"; Page.Header.Controls.Add(meta); 

Grazie mille.

È difficile dirlo con certezza perché non hai incluso molti dettagli, ma penso che quello che sta succedendo è che ci sono <% ... %> blocchi di codice all’interno di Page.Header (che si riferisce a – possibilmente in una pagina principale). Pertanto, quando si tenta di aggiungere un elemento all’insieme Controls di tale controllo, viene visualizzato il messaggio di errore nel titolo di questa domanda.

Se ho ragione, la soluzione è racchiudere un attorno al blocco di codice <% ... %> . In questo modo il codice blocca un figlio del controllo Segnaposto, anziché essere un figlio diretto del controllo Page.Header , ma non modifica affatto l’output Page.Header rendering. Ora che il blocco di codice non è figlio diretto di Page.Header , puoi aggiungere elementi alla raccolta dei controlli dell’intestazione senza errori.

Di nuovo, c’è un blocco di codice da qualche parte o non vedresti questo errore. Se non è nella tua pagina aspx, il primo posto che guarderei è il file a cui fa riferimento l’attributo MasterPageFile nella parte superiore del tuo aspx.

Nel caso in cui si utilizzino i componenti Telerik e si abbia un riferimento nel proprio javascript con <% = ....%>, quindi avvolgere il tag script con un RadScriptBlock.

     

Saluti Örvar

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

La soluzione accettata sull’altra domanda ha funzionato per me: modifica le istanze da <%= a <%# , che converte il blocco di codice da Response.Write a un blocco di valutazione, che non è limitato dalle stesse limitazioni.

In questo caso però, come suggerisce la soluzione accettata , è necessario aggiungere i controlli a qualcosa di diverso da un elemento ContentPlaceHolder della pagina principale, ovvero l' asp:Placeholder suggerito il controllo asp:Placeholder .

Ho avuto lo stesso problema che ho risolto in questo modo:

Invece di aggiungere il meta all’intestazione di pagina corrente che ha causato lo stesso errore che avevi:

 Page.Header.Controls.Add(meta); 

L’ho usato invece:

  Master.FindControl("YourHeadContentPlaceHolder").Controls.Add(meta); 

e funziona come un fascino.

Non risolve davvero la tua domanda, ma è un’alternativa importante.

Se si desidera aggiungere html personalizzato all’inizio della pagina (all’interno dell’elemento ), è ansible utilizzare Page.ClientScript.RegisterClientScriptBlock() .

Sebbene il metodo sia chiamato “script”, ma è ansible aggiungere una stringa arbitaria, incluso html.

Per chi usa Telerik come già detto da Ovar, assicurati di avvolgere il tuo javascript

     

Poiché Telerik non riconosce <% #%> durante la ricerca di un elemento e <% =%> ti darà un errore se il tuo codice javascript non viene spostato.

All’interno di ContentPlaceholder, metti il ​​controllo del segnaposto. Per esempio come questo,

     

Codice dietro:

 HtmlMeta hm1 = new HtmlMeta(); hm1.Name = "Description"; hm1.Content = "Content here"; metatags.Controls.Add(hm1);