CORRECÇÃO: Recebe uma mensagem de erro "Vários controles com a mesma identificação" quando dinamicamente adiciona controles de usuário em cache para WebForms

Traduções deste artigo Traduções deste artigo
ID do artigo: 834608 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Quando você adiciona dinamicamente controles de usuário em cache para um Webform, você receber uma mensagem de erro que é semelhante à seguinte quando você navega para a página da Web:
Vários controles com a mesma identificação '_909b6e15b33' foram encontrados. FindControl requer que os controles tenham identificações exclusivas.

Descrição: Ocorreu uma exceção não tratada durante a execução da atual solicitação da web. Examine o rastreamento da pilha para obter mais informações sobre o erro e onde foi originado no código.

Detalhes da exceção: System.Web.HttpException: vários controles com a mesma identificação '_909b6e15b33' foram encontrados. FindControl requer que os controles tenham identificações exclusivas.
Observação A palavra "web" é capitalizada incorretamente nessa mensagem de erro.

Observação Para obter mais informações sobre controles de armazenamento em cache e usuário de saída, consulte a seção "Referências" deste artigo.

Causa

Esse problema ocorre porque um nome exclusivo é passado para a função LoadCachedControl quando controles dinâmicos são criados do cache. Esse nome exclusivo se destina a ser a identificação exclusiva que é fornecida para esta instância do controle de usuário carregados dinamicamente. No entanto, um código gerado é usado e o código gerado não é exclusivo entre os controles de usuário carregados dinamicamente. Esse comportamento causa o problema mencionado na seção "Sintomas" deste artigo.

Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
837000A propriedade PartialCachingControl.CachedControl sempre retorna uma referência nula

Resolução

importante Esse hotfix contém dois tipos de pacotes: um pacote do Microsoft Windows Installer e um pacote Gerenciador de componentes opcionais (OCM). Se você usar o Windows Server 2003, você deve especificar que você exija a atualização do Windows Server 2003 (OCM), porque a proteção de arquivo do Windows Server 2003 monitora os arquivos do .NET Framework 1.1. Se você usar um sistema operacional que é diferente do Windows Server 2003, você deve continuar a usar o pacote do Windows Installer.

Informações de atualização de software

Um hotfix suportado agora está disponível da Microsoft, mas destina-se somente a corrigir o problema descrito neste artigo. Aplique-o somente nos sistemas que apresentarem esse problema específico. Esta correcção poderá submetida a testes adicionais. Portanto, se você não tiver sido gravemente afetado por esse problema, recomendamos que você aguarde o próximo Microsoft .NET Framework 1.1 Service Pack 1 que contém esse hotfix.

Para resolver esse problema imediatamente, contate o Atendimento Microsoft para obter o hotfix. Para obter uma lista completa de telefones do Atendimento Microsoft e informações sobre os custos de suporte da, visite o seguinte site:
http://support.microsoft.com/contactus/?ws=support
Observação Em alguns casos, as taxas cobradas pelas ligações para chamadas de suporte podem ser canceladas se um profissional de suporte da Microsoft determinar que uma atualização específica resolverá o problema. Os custos normais de suporte serão aplicados a questões e problemas que não se qualificam à atualização específica em questão de suporte adicionais.

Requisitos de reinicialização

Talvez você precise reiniciar o computador se quaisquer serviços ou aplicativos estão sendo executados que use arquivos que estão listados na seção "Informações do arquivo" deste artigo.

Informações sobre o arquivo

A versão em inglês desta atualização de software apresenta os atributos de arquivo (ou posteriores) listados na tabela a seguir. As datas e horas desses arquivos são listadas na acordo hora universal coordenada (UTC). Quando você exibe as informações do arquivo, ele é convertido para a hora local. Para encontrar a diferença entre o UTC e a hora local, use a guia fuso horário na ferramenta Data e hora no painel de controle.
   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

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft que estão listados na seção "Aplica-se a" deste artigo.

Mais Informações

Etapas para reproduzir o problema

  1. Criar a pasta da Web, por exemplo, crie a pasta \inetpub\wwwrooot\PageCaching.
  2. Use o código a seguir para criar um controle de usuário que é chamado Test1.ascx e em seguida, salve-o na pasta da Web que foi criada na etapa 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. Use o código a seguir para criar um controle de usuário que é chamado Test2.ascx e em seguida, salve-o na pasta da Web que foi criada na etapa 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. Use the following code to create a Web form that is named PageCaching.aspx, and then save it to the Web folder that was created in step 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. Vá para http://localhost/PageCaching/PageCaching.aspx. Você receber a mensagem de erro descrita na seção "Sintomas" deste artigo.
Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
824684Descrição da terminologia padrão que é usada para descrever as atualizações de software

Usando a classe PartialCachingControl

A classe PartialCachingControl tem uma propriedade para CacheControl . A propriedade CacheControl pode ser usada para determinar se um controle de usuário já foi colocado no cache. A propriedade CacheControl retorna o controle de usuário somente quando a saída da saída do controle de usuário não é armazenada em cache. Se a saída do controle de usuário existir no cache de saída, a propriedade CacheControl retorna uma referência nula porque o controle nunca é instanciado (no Microsoft Visual Basic, a propriedade CacheControl retorna Nothing). No entanto, a propriedade CacheControl sempre retorna FALSO se a classe PartialCachingControl não está na árvore de controle.

Referências

Para obter informações adicionais, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
306459Visão geral sobre controles de servidor ASP.NET
308378Como executar o cache de fragmento no ASP.NET usando Visual translation from VPE for Csharp .NET
308645Como fazer o cache de fragmento no ASP.NET usando Visual Basic .NET

Propriedades

ID do artigo: 834608 - Última revisão: sexta-feira, 7 de abril de 2006 - Revisão: 4.2
A informação contida neste artigo aplica-se a:
  • 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
Palavras-chave: 
kbmt kbqfe kbhotfixserver kbfix kbnetframe110presp1fix kbcodegen kbcode kbbug KB834608 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 834608

Submeter comentários

 

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