Estou tentando criar um controle de usuário simples que é um controle deslizante. Quando adiciono um AjaxToolkit SliderExtender ao controle do usuário, recebo o erro (* & $ # () @ #:
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
Tentei colocar um espaço reservado no controle de usuário e adicionar programaticamente o extensor de caixa de texto e controle deslizante ao espaço reservado de forma programática e ainda recebo o erro.
Aqui está o código simples:
<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>
Qual é o problema?
c#
asp.net
user-controls
Daniel P
fonte
fonte
@Daniel P
sugestão.Respostas:
Primeiro, inicie o bloco de código com <% # em vez de <% =:
Isso altera o bloco de código de um bloco de código Response.Write para uma expressão de ligação de dados.
Como as
<%# ... %>
expressões de ligação de dados não são blocos de código, o CLR não irá reclamar. Em seguida, no código da página mestre, você adicionaria o seguinte:fonte
#
invés de=
. Eu nunca vou entender esse, faço isso há anos, mas gostaria de saber por que!Eu acabei de encontrar esse problema também, mas encontrei outra solução.
Descobri que agrupar os blocos de código com uma asp: PlaceHolder-tag resolve o problema.
(O CMS que estou usando está inserindo na seção de cabeçalho de algum código por trás do qual me impedia de adicionar blocos de controle personalizados com várias informações, como meta-tags, etc.
fonte
Controls
esse contêiner. Isso basicamente explora este comportamento, colocando o bloco de código em um recipiente separado - assim que o erro só iria aparecer se você quiser modificarControls
oPlaceHolder
, ao invés do controle pai.PlaceHolder
é uma ótima opção para isso, porque não possui código próprio (diferente, digamosPanel
ou<div runat="server">
). Embora eu costumo usar o contrário - coloque os controles que preciso modificarPlaceHolder
.Posso confirmar que mover o javascript com
<% %>
tags da cabeça para a tag do formulário corrige esse errohttp://italez.wordpress.com/2010/06/22/ajaxcontroltoolkit-calendarextender-e-strana-eccezione/
fonte
Coloque o javascript sob uma tag div.
Vai dar certo !!
fonte
head
seção.você pode fazer a mesma funcionalidade se estiver usando o gerenciador de scripts em sua página. você só precisa registrar o script assim
fonte
ScriptManager
adicionar scripts na seção principal ?Eu tive o mesmo problema no controle do usuário. Minha página que hospedava o controle tinha comentários na tag head, eu os removi, tudo funcionou depois. Algumas postagens também sugerem remover scripts da cabeça e colocá-los no corpo.
fonte
Eu tentei usar
<%# %>
sem sucesso. Então mudeiPage.Header.DataBind();
meu código para trásthis.Header.DataBind();
e funcionou bem.fonte
No meu caso, substituí
<%= %>
por<%# %>
e funcionou!fonte
Mantenha o código do script java dentro da tag body
fonte
A técnica de ligação de dados "<% #" não funcionará diretamente dentro das marcas <link> na marca <head>:
O código acima avaliará se
Em vez disso, você deve fazer o seguinte (observe as duas aspas duplas no interior):
E você obterá o resultado desejado:
fonte
Eu tive esse problema, mas não através do cabeçalho. Meu espaço reservado estava no corpo. Então eu substituí tudo
<%=
por<%#
e fize funcionou.
fonte
Uma maneira alternativa é fazer com que outra página .aspx atue como a página à qual você deseja vincular.
É assim que o cabeçalho da Masterpage se parece:
O formulário .aspx mencionado contém seu conteúdo:
Por fim, você precisa da página .aspx para informar ao navegador que está enviando conteúdo CSS:
fonte
Eu também enfrentei o mesmo problema. Eu encontrei as soluções como a seguir.
Solução 1: eu mantive minha tag de script no corpo.
Agora os conflitos relacionados às tags serão resolvidos.
Solução 2:
Também podemos resolver esta uma das soluções acima, como Substituir o bloco de código por <% # em vez de <% = Mas o problema é que ele fornecerá apenas um caminho relativo . Se você quiser um caminho realmente absoluto , não funcionará.
Solução 1 funciona para mim. Em seguida é a sua escolha.
fonte
Eu tive o mesmo problema, mas não tinha nada a ver com JavaScript. Considere este código:
Nessa situação, você receberá o mesmo erro, embora os PlaceHolders não possuam nenhum bloco 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 será resolvido.
fonte
Resolvi um erro semelhante ao colocar o
<script>
interior decontentplaceholder
dentro para dentro em<head>
vez de colocar de<script>
fora o ditocontentplaceholder
dentro do<head>
fonte
Eu tive o mesmo problema em circunstâncias diferentes.
Eu tinha um elemento simples dentro da etiqueta corporal.
A solução foi:
fonte
Eu tive o mesmo problema com o meu sistema, removi o código JavaScript da minha página e coloquei-o no corpo pouco antes de fechar a etiqueta do corpo
fonte
Em alguns casos, o ResolveUrl e o ResolveClientUrl funcionam, mas nem sempre, principalmente no caso dos arquivos de script js. O que acontece é que funciona para algumas páginas, mas quando você navega para outras páginas, pode não funcionar devido ao caminho relativo dessa página específica.
Então, finalmente, minha sugestão é sempre fazer uma verificação completa das páginas do seu site para saber se todas as suas referências javascript estão corretas ou não. Abra seu site no Google Chrome -> clique com o botão direito do mouse na página -> clique em Visualizar página de origem -> HTML aparece -> agora clique nos hiperlinks do JS; se estiver funcionando bem, ele deve abrir o arquivo js em outra janela do navegador, caso contrário não será aberto.
fonte
Tente escrever seu código de script java fora da tag head, ele definitivamente funcionará. É resolvido quando eu copio e colo meu código Java Script na parte inferior da página. No anterior, ele é colocado na tag HEAD agora, pouco antes de fechar a tag do formulário.
fonte
Remova a parte que possui tags de servidor e coloque-a em outro lugar se desejar adicionar controles dinâmicos do código por trás
Removai meu JavaScript da seção principal da página e o adicionei ao corpo da página e o fiz funcionar
fonte
No meu caso, recebi esse erro porque estava configurando incorretamente o InnerText para uma div com html dentro dela.
Exemplo:
fonte
Tags
<%= %>
não funciona em uma tag comrunat="server"
. Mova seu código com à uma outra tag ( , ...), ou remover a partir do recipiente.<%= %>
runat="server"
body
head
runat="server"
fonte