Estoy tratando de crear un control de usuario simple que sea un control deslizante. Cuando agrego un AjaxToolkit SliderExtender al control de usuario obtengo este 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
Intenté poner 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 mediante programación y todavía recibo 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" />:
<asp:Label ID="lblSliderValue" runat="server" />
<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?
c#
asp.net
user-controls
Daniel P
fuente
fuente
@Daniel P
sugerencia.Respuestas:
Primero, inicie el bloque de código con <% # en lugar de <% =:
Esto cambia el bloque de código de un bloque de código Response.Write a una expresión de enlace de datos.
Dado que las
<%# ... %>
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:fuente
#
lugar de=
? Nunca lo entenderé, lo he estado haciendo durante años, ¡pero ojalá supiera POR QUÉ!También me encontré con este problema, pero encontré otra solución.
Descubrí que envolver los bloques de código con un asp: PlaceHolder-tag resuelve el problema.
(El CMS que estoy usando se está insertando en la sección de cabecera de algún código detrás que me restringió de agregar bloques de control personalizados con información diversa como metaetiquetas, etc., por lo que esta es la única forma en que funciona para mí).
fuente
Controls
ese contenedor. Esto básicamente explota este comportamiento, poniendo el bloque de código en un recipiente separado - por lo que el error sólo aparecería si desea modificarControls
de laPlaceHolder
, en lugar del control de los padres.PlaceHolder
es una gran opción para esto, porque no tiene ningún código propio (a diferencia de, digamosPanel
o<div runat="server">
). Aunque generalmente lo uso al revés, coloque los controles que necesito modificarPlaceHolder
.Puedo confirmar que mover el javascript con
<% %>
etiquetas desde la cabeza a la etiqueta del formulario corrige este errorhttp://italez.wordpress.com/2010/06/22/ajaxcontroltoolkit-calendarextender-e-strana-eccezione/
fuente
Coloque el javascript debajo de una etiqueta div.
¡Funcionará!
fuente
head
sección.puede hacer la misma funcionalidad si está utilizando el administrador de scripts en su página. solo tienes que registrar el script como este
fuente
ScriptManager
No agregar guiones en la sección de cabecera ?Tuve el mismo problema en el control de usuario. Mi página que alojaba el control tenía comentarios en la etiqueta principal, eliminé esos comentarios, todo funcionó después. Algunas publicaciones también sugieren eliminar los guiones de la cabeza y colocarlos en el cuerpo.
fuente
Intenté usar
<%# %>
sin éxito. Luego cambiéPage.Header.DataBind();
mi códigothis.Header.DataBind();
y funcionó bien.fuente
En mi caso, he reemplazado
<%= %>
con<%# %>
, y funcionó!fuente
Mantenga el código del script java dentro de la etiqueta del cuerpo
fuente
La técnica de enlace de datos "<% #" no funcionará directamente dentro de las etiquetas <link> en la etiqueta <head>:
El código anterior evaluará a
En su lugar, debe hacer lo siguiente (tenga en cuenta las dos comillas dobles dentro):
Y obtendrá el resultado deseado:
fuente
Tuve este problema, pero no a través del encabezado. Mi marcador de posición estaba en el cuerpo. Así que reemplacé todo
<%=
con<%#
e hiceY funcionó.
fuente
Una forma alternativa es hacer que otra página .aspx actúe como la página a la que desea vincular.
Así es como se ve el encabezado de la página maestra:
El formulario .aspx referenciado contiene su contenido:
Finalmente, necesita la página .aspx para decirle al navegador que está enviando contenido CSS:
fuente
También enfrenté el mismo problema. Encontré las soluciones como las siguientes.
Solución 1: mantuve mi etiqueta de script en el cuerpo.
Ahora se resolverán los conflictos relacionados con las etiquetas.
Solución 2:
También podemos resolver esta 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 un camino realmente absoluto , no funcionará.
La solución 1 me funciona. Lo siguiente es tu elección.
fuente
Tuve el mismo problema, pero no tenía nada que ver con JavaScript. Considera este código:
En esta situación, obtendrá el mismo error a pesar de que PlaceHolders no tiene ningún bloque de código dañino, esto sucede debido al control que no es del servidor hdnTest usa bloques de código.
Simplemente agregue runat = server al hdnTest y el problema está resuelto.
fuente
Resolví un error similar a esto poniendo el
<script>
interiorcontentplaceholder
dentro del interior en<head>
lugar de colocar el<script>
exteriorcontentplaceholder
dentro de dicho<head>
fuente
Tuve el mismo problema con diferentes circunstancias.
Tenía un elemento simple dentro de la etiqueta del cuerpo.
La solución fue:
fuente
Tuve el mismo problema con mi sistema, eliminé el código JavaScript de mi página y lo puse en el cuerpo justo antes de cerrar la etiqueta del cuerpo
fuente
En algunos casos, ResolveUrl y ResolveClientUrl funcionan, pero no siempre, especialmente en el caso de los archivos de script js. Lo que sucede es que funciona para algunas páginas, pero cuando navega a otras páginas puede que no funcione debido a la ruta relativa de esa página en particular.
Finalmente, mi sugerencia es siempre hacer una revisión completa de 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 derecho en la página -> haga clic en ver página de origen -> aparece HTML -> 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á.
fuente
Intente escribir su código de script java fuera de la etiqueta de encabezado 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 en la etiqueta HEAD ahora justo antes de cerrar la etiqueta del formulario.
fuente
Elimine la parte que tiene etiquetas de servidor y colóquela en otro lugar si desea agregar controles dinámicos desde el código detrás
Eliminé mi JavaScript de la sección principal de la página y lo agregué al cuerpo de la página y lo puse a funcionar
fuente
En mi caso, recibí este error porque estaba configurando incorrectamente InnerText en un div con html dentro.
Ejemplo:
fuente
Las etiquetas
<%= %>
no funcionan en una etiqueta conrunat="server"
. Mueva su código con<%= %>
enrunat="server"
a otro tag (body
,head
, ...), o eliminarrunat="server"
del envase.fuente