ИСПРАВЛЕНИЕ: Появляется сообщение об ошибке «Несколько элементов управления с одинаковым Идентификатором» когда динамически добавляете кэшированные элементы управления веб-форм

Переводы статьи Переводы статьи
Код статьи: 834608 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Проблема

Кэшированные элементы управления динамически добавить Webform, появляется сообщение об ошибке, подобное приведенному ниже, при просмотре веб-страницы:
Найдено несколько элементов управления с одинаковым Идентификатором «_909b6e15b33». FindControl требует, что элементы управления имеют уникальные идентификаторы.

Описание: Необработанное исключение при выполнении текущего веб-запроса. Просмотрите трассировку стека для получения дополнительных сведений о данной ошибке и где было задано в коде.

Сведения об исключении: System.Web.HttpException: обнаружено несколько элементов управления с одинаковым Идентификатором «_909b6e15b33». FindControl требует, что элементы управления имеют уникальные идентификаторы.
Примечание Слово «веб» пишется с прописной буквы неправильно в этом сообщении об ошибке.

Примечание Для получения дополнительных сведений о выходного кэширования и пользовательские элементы управления содержатся в разделе «Ссылки» данной статьи.

Причина

Данная проблема возникает из-за уникальное имя LoadCachedControl функции при создании динамических элементов управления из кэша. Это уникальное имя предназначено для уникального Идентификатора, заданному для этого экземпляра динамически загруженный пользовательский элемент управления. Тем не менее использовать сгенерированный код и созданный код не является уникальным через элементы управления динамически загруженный пользовательский. Это приводит к возникновению проблемы, описанной в разделе «Проблема» данной статьи.

Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
837000Свойство PartialCachingControl.CachedControl всегда возвращает пустую ссылку

Решение

ВажныеДанное исправление содержит два типа пакетов: пакет установщика Microsoft Windows и диспетчер дополнительных компонентов пакета (OCM). При использовании Windows Server 2003, необходимо указать то, что требуется обновление Windows Server 2003 (OCM), поскольку отслеживает защиты файлов Windows Server 2003.NET Framework 1.1 файлов. При использовании операционной системы, отличной от Windows Server 2003 необходимо продолжать использовать пакет установщика Windows.

Сведения об обновлении программного обеспечения

Корпорация Майкрософт выпустила исправление, однако оно предназначено только для устранения проблемы, описанной в этой статье. Должно применяться исключительно в системах, в которых обнаружена эта специфическая неполадка. Это исправление находится на стадии дополнительного тестирования. Таким образом Если вы не представляет особой эта проблема, рекомендуется дождаться следующего корпорации Майкрософт.NET Framework 1.1 с пакетом обновления 1, содержащего это исправление.

Чтобы решить проблему немедленно, обратитесь в службу технической поддержки корпорации Майкрософт для получения исправления. Полный список телефонов службы поддержки продуктов Майкрософт и сведения о стоимости поддержки посетите следующий веб-узел корпорации Майкрософт:
http://support.Microsoft.com/contactus/?ws=Support
Примечание В особых случаях, предусмотренная для звонков в службу поддержки может быть отменена, если специалистом службы поддержки Майкрософт определяет, что решения проблемы является специально выпущенное. Затраты на обычные службы поддержки будут применяться дополнительные вопросы и проблемы, которые не соответствуют требованиям особым обновлением.

Необходимость перезагрузки

Возможно, потребуется перезагрузить компьютер, если любые службы или приложения, используйте файлы, перечисленные в разделе «Сведения о файлах» данной статьи.

Сведения о файлах

Английская версия данного обновления программного обеспечения содержит версии файлов (или более поздней версии), приведенные в следующей таблице. Дата и время для файлов указаны в формате общего скоординированного времени (UTC). При просмотре сведений о файле, он преобразуется в локальное время. Чтобы узнать разницу между временем по Гринвичу и местным временем, следует использовать Часовой пояс вкладку Дата и время на панели управления.
   Date         Time   Version            Size    File name
   --------------------------------------------------------------
   04-Feb-2004  04:14  1.1.4322.996      258,048  Aspnet_isapi.dll  
   04-Feb-2004  04:14  1.1.4322.996       20,480  Aspnet_regiis.exe  
   04-Feb-2004  04:14  1.1.4322.996       32,768  Aspnet_state.exe  
   04-Feb-2004  04:14  1.1.4322.996       32,768  Aspnet_wp.exe    
   16-May-2003  00:49                     33,522  Installpersistsqlstate.sql
   16-May-2003  00:49                     34,150  Installsqlstate.sql
   04-Feb-2004  04:05  1.1.4322.996       94,208  Perfcounter.dll  
   04-Feb-2004  04:10                      8,571  Smartnav.js
   05-Feb-2004  05:11  1.1.4322.996    1,220,608  System.dll       
   05-Feb-2004  05:11  1.1.4322.996      241,664  System.messaging.dll  
   05-Feb-2004  05:11  1.1.4322.996      323,584  System.runtime.remoting.dll  
   05-Feb-2004  05:11  1.1.4322.996      131,072  System.runtime.serialization.formatters.soap.dll  
   05-Feb-2004  05:11  1.1.4322.996    1,257,472  System.web.dll   
   05-Feb-2004  05:11  1.1.4322.996      819,200  System.web.mobile.dll  
   05-Feb-2004  05:11  1.1.4322.996      569,344  System.web.services.dll  
   05-Feb-2004  05:11  1.1.4322.996    1,339,392  System.xml.dll   
   04-Feb-2004  04:10                     14,482  Webuivalidation.js

Статус

Корпорация Майкрософт подтверждает, что это проблема в продуктах Microsoft, перечисленных в разделе «Относится к» данной статьи.

Дополнительная информация

Действия по воспроизведению проблемы

  1. Создать веб-папки, например, создайте папку \inetpub\wwwrooot\PageCaching.
  2. Используйте следующий код для создания пользовательского элемента управления с именем Test1.ascx и сохраните его в веб-папке, созданной на шаге 1:
    <%@ OutputCache Duration="60" VaryByParam="none" %>
    <%@ Control Language="c#" "%>
    <asp:Label id="lblTest1" runat="server">Test 1 Control</asp:Label>&nbsp;
    <asp:Label id="lblDynamic" runat="server">Dynamic</asp:Label>
  3. Используйте следующий код для создания пользовательского элемента управления с именем Test2.ascx и сохраните его в веб-папке, созданной на шаге 1:
    <%@ OutputCache Duration="60" VaryByParam="none" %>
    <%@ Control Language="c#" "%>
    <asp:Label id="lblTest1" runat="server">Test 2 Control</asp:Label>&nbsp;
    <asp:Label id="lblDynamic" runat="server">Dynamic</asp:Label>
  4. Используйте следующий код для создания веб-форму с именем PageCaching.aspx и сохраните его в веб-папке, созданной на шаге 1:
    <script runat=server>
        void Page_Init(Object sender, EventArgs ev)
        {
    			Control Pane = Page.FindControl("uc1");
    			Control Item = (Control) LoadCachedControl("test1.ascx", "Dynamic1a");
    			Pane.Controls.Add(Item);
    
    			Pane = Page.FindControl("uc2");
    			Item = (Control) LoadCachedControl("test2.ascx", "Dynamic2a");
    			Pane.Controls.Add(Item);
    
    			Pane = Page.FindControl("uc3");
        }
    
    public PartialCachingControl LoadCachedControl(string r_ControlName, string r_ControlID)
    {
    			PartialCachingControl Control = (PartialCachingControl) Page.LoadControl(r_ControlName);
    			Control.ID = r_ControlID;
    			return Control;
    }			                                                
    </script>
    
    
    <%@ Page language="c#" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    	<HEAD>
    		<title>WebForm1</title>
    		<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
    		<meta name="CODE_LANGUAGE" Content="C#">
    		<meta name="vs_defaultClientScript" content="JavaScript">
    		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    	</HEAD>
    	<body>
    		<form id="Form1" method="post" runat="server">
    			<table>
    				<tr>
    					<td id="uc1" runat="server"></td>
    				</tr>
    				<tr>
    					<td id="uc2" runat="server"></td>
    				</tr>
    				<tr>
    					<td id="uc3" runat="server"></td>
    				</tr>
    			</table>
    		</form>
    	</body>
    </HTML>
  5. Перейдите к http://localhost/PageCaching/PageCaching.aspx. Появляется сообщение об ошибке, описанное в разделе «Проблема» данной статьи.
Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
824684Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт

С помощью класса PartialCachingControl

В PartialCachingControl класс имеет CacheControl свойство. В CacheControl свойство может использоваться для определения, если пользовательский элемент управления уже кэширован. В CacheControl свойство возвращает пользовательский элемент управления только в том случае, если результат вывода пользовательского элемента управления не кэшируется. Если выходной поток пользовательского элемента управления в кэше выходных данных CacheControl свойство возвращает пустую ссылку, так как элемент управления никогда не инициализируется (в Visual Basic CacheControl свойство возвращает значение Nothing). Тем не менее CacheControl свойство всегда возвращает значение FALSE, если PartialCachingControl класс не найден в дереве элемента управления.

Ссылки

Для получения дополнительных сведений щелкните следующие номера статей базы знаний Майкрософт:
306459ASP.Обзор NET серверных элементов управления
308378 Порядок выполнения фрагментарное кэширование в ASP.NET с помощью Visual C#.NET
308645 Порядок выполнения фрагментарное кэширование в ASP.NET с помощью Visual Basic.NET

Свойства

Код статьи: 834608 - Последний отзыв: 16 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft .NET Framework 1.1
  • Microsoft Visual Studio .NET 2003 Professional Edition
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft ASP.NET 1.1
Ключевые слова: 
kbqfe kbhotfixserver kbfix kbnetframe110presp1fix kbcodegen kbcode kbbug kbmt KB834608 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:834608

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com