Попытка добавить ajax TabContainer, возникает ошибка. Коллекцию Controls нельзя изменить, потому что элемент управления содержит блоки кода (т.е. ‹%%›).

Я хочу добавить ajax: TabContainer на свою веб-страницу. Я не получаю никаких ошибок сборки, но когда я пытаюсь перейти на страницу, появляется ошибка: «Коллекция Controls не может быть изменена, потому что элемент управления содержит блоки кода (т.е.‹% ...%>) ». .

Я повторно загрузил Ajax Control Toolkit для образцов сайтов, открыл решение в VS, запустил образец для TabContainer, и он работал нормально. Я подумал, что это, возможно, другая версия Ajax Control Toolkit, но нет. Файлы AjaxControlToolkit.dll, на которые ссылаются два сайта, идентичны. Почему я не могу заставить TabContainer работать на моем сайте?

Есть еще одна проблема, но я не знаю, связана ли она. Я только что установил Visual Studio 2008. Как только я открыл свой веб-сайт, VS автоматически создала вкладку «Элементы управления AJAX» на панели инструментов и заполнила ее всеми элементами управления ajax. В исходном коде все элементы управления имеют префикс «ajax», то есть «‹ ajax: TabContainer runat = "server" ...> ".

Однако, когда я открыл образец веб-сайта, Visual Studio создала еще одну вкладку в панели инструментов - «Компоненты AjaxControlToolkit», заполненную теми же элементами управления, что и в «Элементы управления AJAX». Я не знаю, почему он дважды добавил одни и те же элементы управления (но, как ни странно, с разными значками для них на панели инструментов). В исходном коде все элементы управления имеют префикс «ajaxToolkit», то есть «‹ ajaxToolkit: TabContainer runat = "server" ...> ". Что тут происходит? Я просто хочу, чтобы на моем сайте работал чертов TabContainer.


person Cybis    schedule 10.12.2008    source источник


Ответы (6)


Вы не можете использовать блоки ‹% =%> (запись) внутри элемента управления, который использует стандартный серверный рендеринг - вы получите эту ошибку.

Чтобы компоненты ASP AJAX работали, вам необходимо:

<head runat="server">...

В противном случае он тоже вылетает с этой ошибкой.

Однако вы можете привязать данные внутри этих серверных элементов управления:

<head runat="server">
    <link rel="stylesheet" type="text/css" 
        href="<%# ResolveUrl( "~/styles/common.aspx" ) %>" />
...

А затем в загрузке вашей страницы:

Page.Header.DataBind();

Ошибка возникает из-за того, как ASP WebForms визуализирует элементы управления как коллекции компонентов - они могут обрабатывать либо коллекцию (и ожидать привязку данных ‹% #), либо буквальные записи (и ожидать‹% =), но не то и другое вместе.

Лучший способ навсегда избежать этой проблемы - перейти на ASP MVC.

person Keith    schedule 29.06.2009
comment
Принятый ответ изменен, учитывая, что вы первый, кто правильно ответил на вопрос. Спасибо! Однако сейчас мне не нужно изучать ASP.NET MVC. Я недавно потерял работу. Возможно, в долгосрочной перспективе это хорошо, я больше не могу терпеть веб-разработку. - person Cybis; 04.07.2009

Эта ошибка не относится к Ajax.

Вы можете попробовать поместить свой ajax: TabContainer в asp: Panel. Или удалите блоки кода ‹% ...%> со своей страницы.

person Joe    schedule 10.12.2008
comment
На моей странице нет кодовых блоков ‹%%›! Кроме того, на примере веб-сайта TabContainer не входил в asp: Panel. - person Cybis; 10.12.2008

Привет, ребята, опять же, это не просто теги javascript, а все, что находится в тегах заголовков вашей страницы, которые используют ‹% =%› или ‹% Response.Write%›. Либо измените свой код, чтобы использовать директиву привязки данных ‹% # eval (some code)%›, либо переместите материал в тело (это также полезно для ускорения времени загрузки ваших страниц).

person Mavusi    schedule 25.10.2010

Я понял это!

Это сообщение об ошибке, которое вы получите, если попытаетесь использовать элементы управления AJAX, когда ваш <head> содержит тег <script>.

Я просто переместил JavaScript в тело, и теперь он, кажется, работает нормально.

person Cybis    schedule 10.12.2008
comment
ВАУ, СПАСИБО!!! Я очень, очень ненавидел эту ошибку. Коллекцию Controls нельзя изменить, потому что элемент управления содержит блоки кода. Что, черт возьми, это должно означать !? - person wallyqs; 18.03.2009

Pragnesh, Проверь между тегами HEAD на предмет любого javascript. У меня был некоторый javascript с блоками кода ‹%%>, которые мешали работе элементов управления вкладкой AJAX.

person MAbraham1    schedule 04.02.2010

не нужно ничего делать, просто сохраните ‹% = ....%> Часть кода, которая находится на главной странице в

person Subbu    schedule 25.03.2013
comment
Ответ неполный. - person BBdev; 25.03.2013