viernes, 9 de abril de 2010

Solucion error AjaxControlToolkit - La colección de controles no puede modificarse porque el control contiene bloques de...

Ajax Control Toolkit en ASP.NET Ajax Library


Detalles de la Versión :(AspNetAjaxLibraryBeta0911.zip application, 6490K, uploaded Nov 18 2009 - 147484 downloads)

Al trabajar con esta versión de AJAX en “Visual Studio 2008 con Framework 3.5 SP1” , me arrojo el siguiente error:

“La colección de controles no puede modificarse porque el control contiene bloques de código (por ej. ).”

Las causas puede ser varias pero en mi caso solo era mover el bloque de código JavaScript fuera de la etiqueta "Head" del mi MasterPage. La MasterPage era usada por una pagina que contenía controles AJAX y un control de usuario que también tenía controles AJAX.

Dejo aquí la solución por si le pasa a alguien más. Solo era cambiar esto de la MasterPage:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
    <title>Prueba</title>
    <asp:ContentPlaceHolder id="head" runat="server">
    </asp:ContentPlaceHolder>
    <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
    <script type="text/javascript" src=<%= ResolveUrl("JScript1.js") %>>
    </script>
</head>
<body>
...
</body>
</html>
Por esto otro:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
    <title>Prueba</title>
    <asp:ContentPlaceHolder id="head" runat="server">
    </asp:ContentPlaceHolder>
    <link rel="stylesheet" href="style.css" type="text/css" media="screen" />
</head>
<body>
    <script type="text/javascript" src=<%= ResolveUrl("JScript1.js") %>>
    </script>
...
</body>
</html>

Si tienen otra solución me avisan.

Saludos
Toby

17 comentarios:

  1. Bién, pero si estaba en el <head>, podrías haber colocado tu <%=MiFuncionDelCodebehind() %> en el body.

    ResponderEliminar
  2. bien!!!, yo tuve el mismo problema y me funciono perfecto tu solución gracias.

    ResponderEliminar
  3. Gracias.... tambien lo solucione usando tu metodo

    ResponderEliminar
  4. Muchas gracias, solucione este mismo problema con el metodo que indicaste. solo fue mover el tag del head.

    ResponderEliminar
  5. Me salvaste con este post. muchas gracias

    ResponderEliminar
  6. gracias, muy buen post, me sirvio muchisimo.

    ResponderEliminar
  7. Donde incluyes el ToolkitScriptManager, modifique el master page de mi aplicacion y siempre manda el error :(

    ResponderEliminar
  8. Esto ocurre porque en el < head > tienes un runat="server" y dentro de ese head tienes un bloque de código ASP .NET (denotado por las etiquetas <% %>).

    Dentro de un < head runat="server" > no se puede tener bloque de código porque siempre tira error. La solución es ya sea pasar el script hacia el < body >, usar el control y mediante code-behind asignarle un valor o si estás usando una master page poner ese bloque de código dentro de un Content Place Holder que esté en el < head >.

    ResponderEliminar
    Respuestas
    1. Yo uso un MasterPage y tu solución me fue de gran ayuda. Muchas gracias!!!

      Eliminar
  9. El ToolkitScriptManager debes incluirlo dentro del < form runat="server" > y debe estar antes de cualquier control que lo utilice. De preferencia agrégalo justo después de la etiqueta de apertura del < form runat="server" >

    ResponderEliminar
  10. Ahora no se la definición del por que pero en lugar de usar esta sentencia el HEAD

    debes de usar la misca con el siguiente cambio = por #

    ejemplo src=<%#

    ResponderEliminar
  11. Muchas gracias por la solución. Me fué de ayuda :)

    Melisa

    ResponderEliminar
  12. '//La solucion es agregar el script al content de nombre "head" de la siguiente manera:
    '//Este codigo debe de ser la primera linea de init ó load, sin evaluar postback.

    Dim miScript as Literal = new Literal()

    miScript.Text="< s c r i p t src='" + ResolveUrl("~") + "js/jquery-1.2.6.min.js' type='text/javascript'>"

    head.Controls.Add(miScript)

    ResponderEliminar
  13. Excelente, me salvaste la vida... me funcionó a la perfección, gracias.

    ResponderEliminar
  14. Excelente muchas gracias, fue de mucha ayuda

    ResponderEliminar

Entradas populares