“A coleção Controls não pode ser modificada porque o controle contém blocos de código”

Eu estou tentando criar um controle de usuário simples que é um controle deslizante. Quando adiciono um AjaxToolkit SliderExtender ao controle de usuário, recebo este erro (* & $ # () @ #:

     Erro de Servidor na '/' Aplicação.  A coleção Controls não pode ser modificada porque o controle contém blocos de código (isto é, ``).  Descrição: ocorreu uma exceção não tratada durante a execução da solicitação da web atual.  Por favor, revise o rastreamento de pilha para obter mais informações sobre o erro e onde ele se originou no código.  Detalhes da exceção: System.Web.HttpException: A coleção de controles não pode ser modificada porque o controle contém blocos de código (ou seja, ``).  Erro de origem: uma exceção não tratada foi gerada durante a execução da solicitação da web atual.  Informações sobre a origem e localização da exceção podem ser identificadas usando o rastreamento de pilha de exceção abaixo.  Rastreamento de pilha: [HttpException (0 x 80004005): A coleção de controles não pode ser modificada porque o controle contém blocos de código (ou seja, ``).] System.Web.UI.ControlCollection.Add (controle filho) + 8677431 AjaxControlToolkit.ScriptObjectBuilder.RegisterCssReferences (controle controle) em d: \ AjaxTk-AjaxControlToolkit \ Release \ AjaxControlToolkit \ ExtenderBase \ ScriptObjectBuilder.cs: 293 AjaxControlToolkit.ExtenderControlBase.OnLoad (EventArgs e) em 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, booleano includeStagesAfterAsyncPoint) +627 Informações da versão: Microsoft .NET Framework  Versão: 2.0.50727.3074;  Versão do ASP.NET: 2.0.50727.3074 

Eu tentei colocar um espaço reservado no controle de usuário e adicionando o extensor de checkbox de texto e controle deslizante para o espaço reservado programaticamente e ainda recebo o erro.

Aqui está o código simples:

:  

Qual é o problema?

Primeiro, inicie o bloco de códigos com <% # em vez de <% =:

  My Page    

Isso altera o bloco de código de um bloco de código Response.Write para uma expressão de binding de dados.
Como as expressões de binding de dados <%# ... %> não são blocos de código, o CLR não irá reclamar. Em seguida, no código da página mestra, você adicionaria o seguinte:

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

Eu acabei de me deparar com esse problema, mas encontrei outra solução.

Descobri que agrupar os blocos de código com um asp: PlaceHolder-tag resolve o problema.

  " />  

(O CMS que estou usando está inserindo na seção de cabeça de algum código atrás do qual me restringia de adicionar blocos de controle personalizados com várias informações, como metatags etc, então essa é a única maneira que funciona para mim.)

Posso confirmar que mover o javascript com tags <% %> da cabeça para a tag de formulário corrige esse erro

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

Coloque o javascript em uma tag div.

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

Vai funcionar !!

você pode fazer a mesma funcionalidade se estiver usando o gerenciador de scripts em sua página. você tem que apenas registrar o script como este

      

Eu tive o mesmo problema no controle do usuário. Minha página que estava hospedando o controle tinha comentários na tag head, eu removi esses comentários, tudo funcionou depois. Alguns posts também sugerem remover scripts da cabeça e colocá-los no corpo.

Eu tentei usar <%# %> sem sucesso. Então eu mudei Page.Header.DataBind(); no meu código por trás de this.Header.DataBind(); e funcionou bem.

No meu caso, substituí <%= %> por <%# %> e funcionou!

A técnica de binding de dados <% # "não funcionará diretamente dentro de tags na tag :

    

O código acima será avaliado para

    

Em vez disso, você deve fazer o seguinte (observe as duas aspas duplas dentro):

  " />  

E você obterá o resultado desejado:

    

Mantenha o código do script java dentro da tag body

    

Eu tive esse problema, mas não via o header. Meu espaço reservado estava no corpo. Então eu substituí todo o <%= com <%# e fiz

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

e funcionou.

Uma maneira alternativa é ter outra página .aspx agindo como a página que você deseja vincular.

É assim que se parece o header da Masterpage:

      

O formulário .aspx referenciado contém seu conteúdo:

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

Finalmente, você precisa da página .aspx para informar ao navegador que está enviando o conteúdo CSS:

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

Eu também enfrentei o mesmo problema. Eu encontrei as soluções como seguindo.

Solução 1: mantive minha tag de script no corpo.

  
. . . .

Agora, os conflitos relacionados às tags serão resolvidos.

Solução 2:

Nós também podemos resolver esta uma das soluções acima, como Substituir o bloco de código por <% # ao invés de <% = Mas o problema é que ele dará apenas um caminho relativo . Se você quiser um caminho realmente absoluto , não funcionará.

A solução 1 funciona para mim. Em seguida é a sua escolha.

Eu tive o mesmo problema, mas não teve nada a ver com JavaScript. Considere este código:

    test content  

Nessa situação, você obterá o mesmo erro, mesmo que os PlaceHolders não tenham nenhum bloqueio de código prejudicial, isso ocorre devido ao controle que não é do servidor. O hdnTest usa blocos de código.

Basta adicionar runat = server ao hdnTest e o problema está resolvido.

Eu resolvi um erro semelhante a isso colocando o dentro de um contentplaceholder dentro do invés de colocar o fora do dito contentplaceholder dentro do

Eu tive o mesmo problema com o meu sistema, eu removi o código JavaScript da minha página e coloquei no corpo antes de fechar a tag body

Em alguns casos, ResolveUrl e ResolveClientUrl funcionam, mas não todas as vezes, especialmente no caso de arquivos de script js. O que acontece é que funciona para algumas páginas, mas quando você navega para algumas outras páginas, pode não funcionar devido ao caminho relativo daquela página em particular.

Então, finalmente, minha sugestão é sempre fazer uma revisão completa das páginas do seu site para saber se todas as suas referências javascript estão bem ou não. Abra seu site no Google Chrome -> clique com o botão direito do mouse na página -> clique na página de visualização da fonte -> HTML aparece -> agora clique nos hiperlinks JS; se estiver funcionando bem, deve abrir o arquivo js em outra janela do navegador, caso contrário, ele não será aberto.

Tente escrever seu código de script java fora da tag head, ele definitivamente funcionará. Ele foi resolvido quando copiei e colei meu código Java Script na parte inferior da página. No anterior, ele foi colocado na tag HEAD agora, logo antes de fechar a tag form.

     

Remova a parte que tem tags de servidor e coloque-o em outro lugar, se você quiser adicionar controles dynamics do código por trás

Eu removi meu JavaScript da seção principal da página e adicionei-o ao corpo da página e consegui que funcionasse

No meu caso, eu recebi este erro porque eu estava erroneamente configurando o InnerText para um div com html dentro dele.

Exemplo:

 SuccessMessagesContainer.InnerText = "";  

Eu tive o mesmo problema com diferentes circunstâncias.
Eu tinha um elemento simples dentro da tag body.
A solução foi:

  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 <%= %> não funcionam em uma tag com runat="server" . Mova seu código com <%= %> para runat="server" para outra tag ( body , head , …), ou remova runat="server" do container.