Используя ASP.NET 2.0, у меня есть веб-приложение, в котором я пытаюсь использовать JavaScript, чтобы сделать одну вкладку в контейнере вкладок активной вкладкой.
Рекомендации основаны на:
var mX=document.getElementById('<%= tc1.ClientID%>')
$find('<%= tc1.ClientID%>').set_activeTabIndex(1);
Которые оба вызывают ошибку:
The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).
Я пробовал переместить код из тега заголовка в тег тела; та же ошибка.
Я также пробовал альтернативу <%# tc1.ClientID%>, например:
var mX = document.getElementById('<%# tc1.ClientID %>')
mX.ActiveTabIndex = "2";
Генерирует нулевую ошибку - приведенный выше код отображается в HTML как:
var mX = document.getElementById('')
mX.ActiveTabIndex = "2";
Может ли кто-нибудь объяснить простым языком, что это означает и каково решение?





Похоже, что фрагменты кода сами по себе не являются оскорбительными, но некоторый код Другой, который изменял коллекцию элементов управления, теперь расстроен из-за них. Можете ли вы сказать, где именно в вашей программе происходит ошибка?
Кстати, <% #%> здесь не подходит - он только для элементов управления с привязкой к данным.
Вы не можете смешивать блоки кода с элементами управления, вместо этого сохраните значение в javascript и назначьте его таким образом ... примерно так:
<div runat = "server" id = "rawr">
<span id = "myspan">HI</span>
</div>
</form>
<script type = "text/javascript">
var obj = '<%= DateTime.Now.ToShortDateString() %>';
var ele = document.getElementById("myspan");
ele.innerHTML = obj;
</script>
Я действительно сталкивался с этим раньше. Вот объяснение: http://west-wind.com/WebLog/posts/6148.aspx
Например, если ваша разметка выглядит так:
<asp:Panel id = "whatever" runat = "server">
<script type = "text/javascript">
var mX=document.getElementById('<%= tc1.ClientID%>');
//and so on...
</script>
</asp:Panel>
И если вы попытаетесь программно добавить элемент управления в эту панель, произойдет сбой с полученной вами ошибкой.
Одно из решений - поместить ваш Javascript в другое место на странице. Другой способ (хоть и взломанный) таков:
<asp:Panel id = "whatever" runat = "server">
<asp:PlaceHolder id = "dontCare" runat = "server">
<script type = "text/javascript">
var mX=document.getElementById('<%= tc1.ClientID%>');
//and so on...
</script>
</asp:PlaceHolder>
</asp:Panel>
Теперь часть <% = ...%> находится внутри PlaceHolder, а не непосредственно внутри Panel. Добавление элементов управления в ваш код C# или VB в Panel теперь должно работать (хотя добавление элементов управления в PlaceHolder не сработает).
Обновлено:
Да, я тоже пробовал использовать <% # ...%>, но это только для элемента управления DataBound. Например, это сработало бы, если бы он находился в середине DataGrid, и я назвал бы его метод DataBind () этим PostBack.
Это исправление этой неясной ошибки, если вы только начинаете использовать ASP.NET MVC. Я оставляю эту заметку здесь на тот случай, если у другого человека, такого же, как я, возникнет эта проблема, и я действительно хочу спасти этого парня от потери времени из-за этой хромой ошибки:
ИЗМЕНИТЕ РАСПОЛОЖЕНИЕ тегов <SCRIPT> !!!
Скорее всего, вы хотели разместить javascript на странице Site.Master, но когда вы это сделали, вы сделали это под тегами, когда вы включили jQuery. Нет, сэр! Включите тег <script> с кодом javascript из <head> в <body>. Удачи!
переместить javascript из головы .. и убедитесь, что вы добавили scriptmanager в свой default.aspx при использовании ajaxextenders ..