268 votos

"La colección de Controles no pueden ser modificados porque el control contiene bloques de código"

Estoy tratando de crear un control de usuario sencillo que es un control deslizante. Cuando agrego una AjaxToolkit SliderExtender para el control de usuario me sale esto (*&$#()@# error:

Server Error in '/' Application. The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>). Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[HttpException (0x80004005): The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).]    System.Web.UI.ControlCollection.Add(Control child) +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


Version Information: Microsoft .NET Framework Version:2.0.50727.3074; ASP.NET Version:2.0.50727.3074

He intentado poner un marcador de posición en el control de usuario y agregar el cuadro de texto y regulador extensor para el marcador de posición programática y me sigue apareciendo el error.

Aquí está el código:

<table cellpadding="0" cellspacing="0" style="width:100%">
<tbody>
    <tr>
        <td></td>
        <td>
            <asp:Label ID="lblMaxValue" runat="server" Text="Maximum" CssClass="float_right" />
            <asp:Label ID="lblMinValue" runat="server" Text="Minimum" />
        </td>
    </tr>
    <tr>
        <td style="width:60%;">
            <asp:CheckBox ID="chkOn" runat="server" /><asp:Label ID="lblPrefix" runat="server" />:&nbsp;<asp:Label ID="lblSliderValue" runat="server" />&nbsp;<asp:Label ID="lblSuffix" runat="server" />
        </td>
        <td style="text-align:right;width:40%;">                

                <asp:TextBox ID="txtSlider" runat="server" Text="50" style="display:none;" />
                <ajaxToolkit:SliderExtender ID="seSlider" runat="server" 
                    BehaviorID="seSlider" 
                    TargetControlID="txtSlider" 
                    BoundControlID="lblSliderValue" 
                    Orientation="Horizontal" 
                    EnableHandleAnimation="true" 
                    Length="200" 
                    Minimum="0" 
                    Maximum="100" 
                    Steps="1" />

        </td>
    </tr>
</tbody>



¿Cuál es el problema?

Gracias de antemano.

365voto

Jalal El-Shaer Puntos 6027

En primer lugar, iniciar el bloque de código con <%# en lugar de <%= :

<head id="head1" runat="server">
  <title>My Page</title>
  <link href="css/common.css" rel="stylesheet" type="text/css" />
  <script type="text/javascript" src="<%# ResolveUrl("~/javascript/leesUtils.js") %>"></script>
</head>

Esto cambia el bloque de código a partir de un Response.Write bloque de código a un enlace de datos de la expresión.
Desde <%# ... %> databinding expresiones no son bloques de código, el CLR no se quejan. A continuación, en el código de la página maestra, añadiría lo siguiente:

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

170voto

Jonas Stensved Puntos 2803

Sólo me encontré con este problema así, pero encontró otra solución.

Me encontré con que envolver los bloques de código con un asp:Marcador de posición de la etiqueta se soluciona el problema.

<asp:PlaceHolder runat="server">
  <meta name="ROBOTS" content="<%= this.ViewData["RobotsMeta"] %>" />
</asp:PlaceHolder>

(El CMS que estoy usando es la inserción en la cabeza de la sección de código detrás de la cual restringe me agreguen control personalizado de bloques con distintas informaciones como meta tags, etc., de manera que esta es la única forma en la que funciona para mí.)

37voto

ITalez Puntos 251

Puedo confirmar que el movimiento del javascript con <% %> etiquetas de la cabeza a la etiqueta del formulario corrige este error

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

21voto

Anup Puntos 131

Coloque el javascript de una etiqueta div.

<div runat="server"> //div tag must have runat server
  //Your Jave script code goes here....
</div>

Va a funcionar!!

7voto

Mohan Prajapati Puntos 71

usted puede hacer la misma función que si usted está usando script manager en la página. tienes que registrar el guión como este

<asp:ScriptManager ID="ScriptManager1" runat="server" LoadScriptsBeforeUI="true"   EnablePageMethods="true">  
<Scripts>
      <asp:ScriptReference Path="~/Styles/javascript/jquery.min.js" />
</Scripts>
</asp:ScriptManager>

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: