При попытке добавить ajax TabContainer появляется сообщение об ошибке «Невозможно изменить коллекцию элементов управления, так как элемент управления содержит блоки кода (т.е. <% ...%>)» - PullRequest
1 голос
/ 10 декабря 2008

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

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

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

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

Ответы [ 6 ]

6 голосов
/ 29 июня 2009

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

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

<head runat="server">...

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

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

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

А потом на вашу страницу загрузится:

Page.Header.DataBind();

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

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

2 голосов
/ 10 декабря 2008

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

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

1 голос
/ 25 октября 2010

Эй, ребята, опять же, это не просто теги javascript, а что-то внутри тегов head вашей страницы, которые используют <% =%> или <% Response.Write%>. Либо измените код, чтобы использовать директиву привязки данных <% # eval (<i> некоторый код )%>, либо переместите материал в тело (это также полезно для ускорения времени загрузки ваших страниц).

1 голос
/ 10 декабря 2008

Я понял это!

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

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

0 голосов
/ 25 марта 2013

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

0 голосов
/ 04 февраля 2010

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

...