Коллекция Controls не может быть изменена, потому что элемент управления содержит блоки кода (то есть <% ...%>) - PullRequest
1 голос
/ 21 декабря 2010

Я пытаюсь добавить панель в качестве дочернего элемента управления другой панели в коде позади главной страницы, это просто как:

Panel1.Controls.Add(Panel2)

Однако, когда я пытаюсь сделать это, я получаю этоошибка:

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).

Есть ряд вопросов, в которых говорится о наличии элементов <% =%> в разделе заголовка, которых у меня нет.Я был так далеко, чтобы удалить все элементы <%%> с этой страницы, но безрезультатно, ошибка все еще происходит.Кто-нибудь может предложить способ заставить это работать?

Ответы [ 3 ]

5 голосов
/ 02 мая 2011

* Пример ответа B *

=== код с ошибкой ===

<script type="text/javascript">
    jQuery(document).ready(
        function() {
            alert('Hello!');
            jQuery("#<%=TxtSampleId.ClientID %>").focus();
        }
    );
</script>

=== код без ошибок ===

<script type="text/javascript">
    jQuery(document).ready(
        function() {
            alert('Hello!');
            jQuery("#<%=TxtSampleId.ClientID %>").focus();
        }
    );
</script>

</ жерех: PlaceHolder>

1 голос
/ 02 мая 2011

«Коллекция элементов управления не может быть изменена, поскольку элемент управления содержит блоки кода (т. Е. <% ...%>)».ошибка может быть очень раздражающей, если не сказать больше.Это ошибка, которую Microsoft отказывается исправить, потому что есть обходные пути.Это происходит, когда вы пытаетесь динамически загрузить элементы управления из кода позади, но ваш источник страницы конфликтует.Может происходить несколько вещей ...

Примечание. Переполнение стека плохо обрабатывает синтаксис примеров кода, поэтому я буду ссылаться на каждый ответ письмом, а в следующем посте япопытаться напечатать пример.Но я не хочу загромождать этот пост, потому что хочу донести свои баллы.

A.) У вас есть <% Response.Write ("что-то")%> в источнике вашей страницы.Или <% CodeBehindMethod ()%>.Удалите это и будьте изобретательны, чтобы заполнить это другим способом !!Одним из способов является размещение элемента управления ASP.NET Panel (например, Panel ==> превращается в тег div при отображении в HTML) на вашу страницу и динамическое заполнение внутреннего атрибута HTML этого элемента управления.Есть и другие способы решения этой проблемы.

B.) Вы пытаетесь использовать jQuery внутри встроенного блока скриптов в вашем контроле, вы также получите это.Окружите блок встроенного кода JavaScript тегом ASP.NET PlaceHolder.Это так просто.Если вы этого не сделаете, некоторые функции jQuery будут работать, но не все!

C.) Если вы используете диспетчер скриптов без главной страницы, я бы посоветовал вам начать использовать главную страницу, чтобы избежать проблем позже,Затем используйте ASP.NET ContentPlaceHolder для своей головы и теги тела, чтобы упростить настройку страниц.Когда вы ссылаетесь на файлы javascript на своей главной странице и используете Script Manager, обязательно поместите тег Scripts внутри тега ScriptManager.Затем внутри тега Scripts поместите тег ScriptReference с указанием пути полного пути ваших файлов Javascript.Обязательно ставьте тильду и косую черту "~ /" в начале вашего пути от корня вашего веб-приложения.Многие поставят свой тег ScriptManager под свой контроль.Не делай этого.Поместите это в свою главную страницу!Это облегчает жизнь.

D.) Если A, B или C не ответили на ваш вопрос, то я бы предложил убрать каждый фрагмент вашей страницы и все элементы управления на нем, и добавить каждый ввремя.Если у вас огромная иерархия страниц и управление наследованием (если в вашем приложении нет мастер-страницы), удачи!В конце концов вы поймете, что вызвало это.

0 голосов
/ 03 мая 2011

* Пример ответа C *

=== код без ошибок ===

Код мастер-страницы:

<! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Transitional // EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Пример переполнения стека

<Жерех: ContentPlaceHolder>


</ Жерех: ScriptManager>
</ Жерех: ContentPlaceHolder>

=============================================== =====

Источник страницы:

... разместите здесь заголовочные файлы вашей страницы (js, css и т. д.) </ Жерех: содержание>

.. разместите здесь свой HTML-код или код ASP.NET </ Жерех: содержание>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...