Я пытаюсь создать простой пользовательский элемент управления, который является слайдером. Когда я добавляю AjaxToolkit SliderExtender в пользовательский элемент управления, я получаю эту ошибку (* & $ # () @ #:
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
Я попытался поместить заполнитель в пользовательский элемент управления и добавить текстовое поле и расширитель ползунка программно, и я все еще получаю сообщение об ошибке.
Вот простой код:
<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>
В чем проблема?
c#
asp.net
user-controls
Даниэль П
источник
источник
@Daniel P
предложения.Ответы:
Сначала запустите блок кода с <% # вместо <% =:
Это изменяет блок кода с блока кода Response.Write на выражение привязки данных.
Поскольку
<%# ... %>
выражения привязки данных не являются блоками кода, CLR не будет жаловаться. Затем в коде главной страницы вы добавите следующее:источник
#
вместо=
. Я никогда не пойму этого, делаю это годами, но хотелось бы знать ПОЧЕМУ!Я просто столкнулся с этой проблемой, но нашел другое решение.
Я обнаружил, что обертывание блоков кода тегом asp: PlaceHolder решает проблему.
(CMS, которую я использую, вставляет в раздел заголовка какой-то код, который ограничивает меня от добавления пользовательских блоков управления с различной информацией, такой как мета-теги и т. Д., Так что это единственный способ, которым он работает для меня.)
источник
Controls
этот контейнер. Это в основном использует это поведение, помещая блок кода в отдельном контейнере - так ошибка будет отображаться только , если вы хотите изменитьControls
изPlaceHolder
, а не родительского контроля.PlaceHolder
это отличный выбор для этого, потому что у него нет собственного кода (в отличие, скажем,Panel
или<div runat="server">
). Хотя я обычно использую его наоборот - вставьте элементы управления, которые мне нужно изменитьPlaceHolder
.Я могу подтвердить, что перемещение JavaScript с
<% %>
тегами из головы в тег формы исправляет эту ошибкуhttp://italez.wordpress.com/2010/06/22/ajaxcontroltoolkit-calendarextender-e-strana-eccezione/
источник
Поместите JavaScript под тегом div.
Это сработает !!
источник
head
разделе.Вы можете сделать ту же функциональность, если вы используете менеджер скриптов на своей странице. Вы должны просто зарегистрировать скрипт, как это
источник
ScriptManager
не добавлять скрипты в головной раздел ?У меня была такая же проблема в пользовательском контроле. На моей странице, на которой размещался элемент управления, были комментарии в теге head, я удалил эти комментарии, потом все заработало. Некоторые посты также предлагают удалить скрипты из головы и поместить их в тело.
источник
Я пытался использовать
<%# %>
безуспешно. Затем я изменилPage.Header.DataBind();
свой код на,this.Header.DataBind();
и он работал нормально.источник
В моем случае я заменил
<%= %>
на<%# %>
, и это сработало!источник
Держите код java-скрипта внутри тега body
источник
Метод привязки данных <% # не будет работать напрямую внутри тегов <link> в теге <head>:
Приведенный выше код будет оцениваться как
Вместо этого вы должны сделать следующее (обратите внимание на две двойные кавычки внутри):
И вы получите желаемый результат:
источник
У меня была эта проблема, но не через Заголовок. Мой заполнитель был в теле. Поэтому я заменил все
<%=
с<%#
и сделали это сработало.
источник
Альтернативный способ - заставить другую страницу .aspx выступать в качестве страницы, на которую вы хотите сослаться.
Вот как выглядит заголовок главной страницы:
Ссылочная форма .aspx содержит ваш контент:
Наконец, вам нужна страница .aspx, чтобы сообщить браузеру, что вы отправляете контент CSS:
источник
Я также столкнулся с той же проблемой. Я нашел решения, как следующие.
Решение 1: я сохранил свой скрипт тег в теле.
Теперь конфликты относительно тегов разрешатся.
Решение 2:
Мы также можем решить это одно из приведенных выше решений, таких как Заменить блок кода на <% # вместо <% =. Но проблема в том, что он даст только относительный путь . Если вы хотите действительно абсолютный путь, он не сработает.
Решение 1 работает для меня. Далее ваш выбор.
источник
У меня была та же проблема, но она не имела ничего общего с JavaScript. Рассмотрим этот код:
В этой ситуации вы получите ту же ошибку, даже если у PlaceHolders нет вредоносных блоков кода, это происходит из-за несерверного управления hdnTest использует блоки кода.
Просто добавьте runat = server в hdnTest, и проблема решена.
источник
Я решил ошибку, похожую на эту, поместив
<script>
внутреннюю частьcontentplaceholder
внутрь,<head>
вместо того, чтобы поместить<script>
внешнюю частьcontentplaceholder
внутри<head>
источник
У меня была такая же проблема с разными обстоятельствами.
У меня был простой элемент внутри тега body.
Решение было:
источник
У меня была такая же проблема с моей системой, я удалил код JavaScript со своей страницы и поместил его в тело непосредственно перед закрытием тега тела
источник
В некоторых случаях ResolveUrl и ResolveClientUrl работают, но не всегда, особенно в случае файлов сценариев js. Что происходит, это работает для некоторых страниц, но когда вы переходите на другие страницы, это может не работать из-за относительного пути к этой конкретной странице.
Итак, наконец, я предлагаю всегда перепроверять страницы вашего сайта, чтобы убедиться, что все ваши ссылки на JavaScript хороши или нет. Откройте свой сайт в Google Chrome -> щелкните правой кнопкой мыши на странице -> нажмите кнопку просмотра исходной страницы -> появится HTML -> теперь нажмите на гиперссылки JS; если он работает нормально, он должен открыть файл js в другом окне браузера, иначе он не откроется.
источник
Попробуйте написать код Java-сценария вне тега head, он определенно будет работать. Он разрешается, когда я копирую и вставляю свой код Java-сценария в конец страницы. В предыдущем он помещается в тег HEAD, прямо перед закрытием тега формы.
источник
Удалите часть, которая имеет серверные теги, и поместите ее где-нибудь еще, если вы хотите добавить динамические элементы управления из кода позади
Я удалил свой JavaScript из заголовка раздела страницы и добавил его в тело страницы, и он заработал
источник
В моем случае я получил эту ошибку, потому что я неправильно установил InnerText в div с html внутри.
Пример:
источник
Теги
<%= %>
не работают в тег сrunat="server"
. Переместите код<%= %>
вrunat="server"
к другому тегу (body
,head
, ...), или удалитьrunat="server"
из контейнера.источник