update net asp c# asp.net user-controls

update mysql asp net c#



"La colección de Controles no se puede modificar porque el control contiene bloques de código" (22)

Estoy tratando de crear un control de usuario simple que es un control deslizante. Cuando agrego un SliderExtender AjaxToolkit al control de usuario obtengo 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 colocar un marcador de posición en el control del usuario y agregar el cuadro de texto y el extensor del control deslizante al marcador de posición programáticamente y aún me sale el error.

Aquí está el código simple:

<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> </table>

¿Cuál es el problema?


Acabo de encontrarme con este problema también, pero encontré otra solución.

Encontré que envolver los bloques de código con un asp: PlaceHolder-tag resuelve el problema.

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

(El CMS que estoy usando se está insertando en la sección de cabecera de un código detrás del cual me restringí de agregar bloques de control personalizados con información diversa, como etiquetas meta, etc., de modo que esta es la única manera en que funciona para mí).


Coloque el javascript bajo una etiqueta div.

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

¡¡Funcionará !!


Elimine la parte que tiene etiquetas de servidor y colóquela en otro lugar si desea agregar controles dinámicos desde el código que está detrás.

Quité mi JavaScript de la sección principal de la página, lo agregué al cuerpo de la página y lo hice funcionar


En mi caso, he reemplazado <%= %> con <%# %> , ¡y funcionó!


En mi caso, recibí este error porque estaba configurando incorrectamente InnerText a un div con html dentro.

Ejemplo:

SuccessMessagesContainer.InnerText = ""; <div class="SuccessMessages ui-state-success" style="height: 25px; display: none;" id="SuccessMessagesContainer" runat="server"> <table> <tr> <td style="width: 80px; vertical-align: middle; height: 18px; text-align: center;"> <img src="<%=Image_success_icn %>" style="margin: 0 auto; height: 18px; width: 18px;" /> </td> <td id="SuccessMessage" style="vertical-align: middle;" class="SuccessMessage" runat="server" > </td> </tr> </table> </div>


Intenté usar <%# %> sin éxito. Entonces cambié Page.Header.DataBind(); en mi código detrás de this.Header.DataBind(); y funcionó bien.


Intente escribir su código de script java fuera de la etiqueta de cabecera, definitivamente funcionará. Se resuelve cuando copio y pego mi código de Java Script en la parte inferior de la página. En el anterior se coloca ahora en la etiqueta HEAD justo antes de cerrar la etiqueta del formulario.

</div> <script> function validate() { try { var username = document.getElementById("<%=txtUserName.ClientID%>").value; var password = document.getElementById("<%=txtPWD.ClientID%>").value; if (username == "" && password == "") alert("Enter Username and Passowrd"); else { if (username == "") alert("Enter Username"); else if (password == "") alert("Enter Password"); } } catch (err) { } } </script> </form>


La técnica de enlace de datos "<% #" no funcionará directamente dentro de las etiquetas <link> en la etiqueta <head>:

<head runat="server"> <link rel="stylesheet" type="text/css" href="css/style.css?v=<%# My.Constants.CSS_VERSION %>" /> </head>

El código anterior evaluará a

<head> <link rel="stylesheet" type="text/css" href="css/style.css?v=&lt;%# My.Constants.CSS_VERSION %>" /> </head>

En su lugar, debe hacer lo siguiente (tenga en cuenta las dos comillas dobles en el interior):

<head runat="server"> <link rel="stylesheet" type="text/css" href="css/style.css?v=<%# "" + My.Constants.CSS_VERSION %>" /> </head>

Y obtendrás el resultado deseado:

<head> <link rel="stylesheet" type="text/css" href="css/style.css?v=1.5" /> </head>


Las etiquetas <%= %> no funcionan en una etiqueta con runat="server" . Mueva su código con <%= %> a runat="server" a otra etiqueta ( body , head , ...), o elimine runat="server" del contenedor.


Mantener el código de script java dentro de la etiqueta del cuerpo

<body> <script type="text/javascript"> </script> </body>


Para algunos casos, ResolveUrl y ResolveClientUrl funcionan, pero no siempre, especialmente en el caso de archivos de script js. Lo que sucede es que funciona para algunas páginas, pero cuando navegas a otras páginas puede que no funcione debido a la ruta relativa de esa página en particular.

Así que, finalmente, mi sugerencia es siempre volver a revisar las páginas de su sitio para ver si todas sus referencias de javascript están bien o no. Abra su sitio en Google Chrome -> haga clic con el botón derecho en la página -> haga clic en ver la página de origen -> HTML aparece -> ahora haga clic en sus hipervínculos JS; si funciona bien, debería abrir el archivo js en otra ventana del navegador, de lo contrario no se abrirá.


Primero, inicie 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 de un bloque de código Response.Write a una expresión de enlace de datos.
Como <%# ... %> expresiones de enlace de datos no son bloques de código, el CLR no se quejará. Luego, en el código de la página maestra, agregaría lo siguiente:

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



Resolví un error similar a este poniendo el <script> dentro de un contentplaceholder dentro del <head> lugar de poner el <script> fuera del dicho contentplaceholder dentro del <head>


También me enfrenté a la misma cuestión. Encontré las soluciones como las siguientes.

Solución 1: Mantuve mi etiqueta de script en el cuerpo.

<body> <form> . . . . </form> <script type="text/javascript" src="<%= My.Working.Common.Util.GetSiteLocation()%>Scripts/Common.js"></script> </body>

Ahora los conflictos con respecto a las etiquetas se resolverán.

Solución 2:

También podemos resolver esto con una de las soluciones anteriores, como Reemplazar el bloque de código con <% # en lugar de <% = Pero el problema es que solo dará una ruta relativa . Si quieres una ruta realmente absoluta no funcionará.

La solución 1 funciona para mí. Lo siguiente es tu elección.


Tuve el mismo problema con diferentes circunstancias.
Tenía un elemento simple dentro de la etiqueta del cuerpo.
La solución fue:

<asp:PlaceHolder ID="container" runat="server"> <a id="child" href="<%# variable %>">Change me</a> </asp:PlaceHolder>

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


Tuve el mismo problema con mi sistema, eliminé el código JavaScript de la parte de mi página y lo coloqué en el cuerpo justo antes de cerrar la etiqueta del cuerpo


Tuve el mismo problema en el control del usuario. Mi página que albergaba el control tenía comentarios en la etiqueta de cabecera, eliminé esos comentarios, todo funcionó después. Algunas publicaciones también sugieren eliminar guiones de la cabeza y colocarlos en el cuerpo.


Tuve el mismo problema, pero no tenía nada que ver con JavaScript. Considere este código:

<input id="hdnTest" type="hidden" value=''<%= hdnValue %>'' /> <asp:PlaceHolder ID="phWrapper" runat="server"></asp:PlaceHolder> <asp:PlaceHolder ID="phContent" runat="server" Visible="false"> <b>test content</b> </asp:PlaceHolder>

En esta situación, obtendrá el mismo error a pesar de que los PlaceHolders no tienen ningún bloque de código dañino, esto sucede debido a que el control que no es del servidor hdnTest usa bloques de código.

Simplemente agregue runat = server a hdnTest y se solucionará el problema.


Tuve este problema, pero no a través del encabezado. Mi marcador de posición estaba en el cuerpo. Así que reemplacé todo el <%= con <%# e hice

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

Y funcionó.


Una forma alternativa es hacer que otra página .aspx actúe como la página a la que desea enlazar.

Así es como se ve el encabezado de la página maestra:

<head runat="server"> <asp:ContentPlaceHolder ID="head" runat="server"> </asp:ContentPlaceHolder> <link href="CSS/AccordionStyles.aspx" rel="stylesheet" type="text/css" /> </head>

El formulario .aspx referenciado contiene su contenido:

<%@ 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, necesita la página .aspx para indicar al navegador que está enviando contenido CSS:

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


puede hacer la misma funcionalidad si está utilizando el administrador de scripts en su página. Tienes que registrar el script como este

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