ASP.NET «Невозможно изменить элементы управления [потому что он содержит блоки кода] ...» на одном сервере, но не на другом - PullRequest
1 голос
/ 07 июля 2011

У меня есть веб-приложение, которое работает на моем локальном компьютере и на нашем тестовом сервере, но не работает в производственном режиме с этой ошибкой:

Невозможно изменить коллекцию Controls, поскольку элемент управления содержит блоки кода(т. е. <% ...%>).

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

Полная трассировка стека (обратите внимание, что он включает Ajax Toolkit):

System.Web.HttpException: The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).
   at System.Web.UI.ControlCollection.Add(Control child)
   at AjaxControlToolkit.ScriptObjectBuilder.RegisterCssReferences(Control control)
   at AjaxControlToolkit.ExtenderControlBase.OnLoad(EventArgs e)
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Ответы [ 3 ]

1 голос
/ 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 оценивает все выражения привязки данных в заголовке во время загрузки.

0 голосов
/ 16 мая 2016

Оберните содержимое вашей головы, где "<% =" используется в качестве заполнителя, например: </p>

<asp:PlaceHolder Runat="server">

   <script type="text/javascript" src="<%= ResolveUrl("~/script.js") %>">       

   <link rel="stylesheet" type="text/css" href="<%= ResolveUrl("~/style.css") %>"/>

</asp:PlaceHolder>
0 голосов
/ 07 июля 2011

Попробуйте удалить <%%> и добавить свои атрибуты / тексты из кода позади

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