Что вызывает «коллекцию элементов управления нельзя изменить, поскольку элемент управления содержит блоки кода»? - PullRequest
1 голос
/ 12 августа 2010

Недавно я поместил кодовые блоки <% %> в мою мастер-страницу. Обратите внимание, что я читал об «исправлении» для перемещения элементов из <head> или использования <%# %>, но ни один из них не подходит для моего приложения.

Теперь странно то, что я получаю эту ошибку только на одной моей странице. Все остальные страницы работают нормально, так что же на самом деле вызывает эту ошибку? Я ничего не могу придумать, что уникально в этой странице. Он использует менеджер сценариев, как и другие рабочие страницы, и в этой странице нет ничего необычного. На нем есть довольно много пользовательских элементов управления, поэтому отыскать отличия на этой странице сложнее, чем обычно.

Так что же на самом деле вызывает исключение Controls collection cannot be modified because the control contains code blocks?

Ответы [ 4 ]

2 голосов
/ 19 января 2012

Я придумал что-то, что мне кажется намного проще и понятнее - оставив тег в заголовке, где он принадлежит.

Сначала начните блок кода с <% # вместо <% =: </p>

<head id="head1" runat="server">
   <title>My Page</title>
   <link href="css/common.css" rel="stylesheet" type="text/css" />
   <script type="text/javascript" src="<%# ResolveUrl("~/javascript/leesUtils.js") %>"></script>
</head>

Это изменяет блок кода с блока кода Response.Write на выражение привязки данных. Поскольку выражения привязки данных <% # ...%> не являются блоками кода, CLR не будет жаловаться. Затем в коде главной страницы добавьте следующее:

protected void Page_Load(object sender, EventArgs e)
   {
      Page.Header.DataBind();    
   }

Метод DataBind оценивает все выражения привязки данных в вашем заголовке во время загрузки.

2 голосов
/ 12 августа 2010

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

Например, когда вы используете темы, класс Page автоматически добавит теги <link> в <head> для каждого файла CSS в каталоге вашей темы.Но это также может быть вызвано установкой Page.Title.

Но есть много других способов, которые могут привести к изменениям тега <head>, поэтому без дополнительной информации (такой как трассировка стека) трудно дать однозначный ответ.

1 голос
/ 12 августа 2010

Если у вас включены темы, это может привести к этому.

1 голос
/ 12 августа 2010

Если у вас есть страница или элемент управления с <% %> и вы когда-либо динамически обновляете коллекцию элементов управления (добавьте элемент управления на страницу, которая не определена в .aspx / .ascx), эта ошибка сработает.Чтобы обойти это, я использовал <ASP:Literal/> для ввода данных вместо <% %>

...