CORRECÇÃO: Recebe uma mensagem de erro "Vários controlos com o mesmo ID" quando adicionar dinamicamente controlos de utilizador em cache Web Forms
Quando adicionar dinamicamente controlos de utilizador em cache para um Webform, recebe uma mensagem de erro semelhante à seguinte quando navega para a página Web:
Foram encontrados vários controlos com o mesmo ID '_909b6e15b33'. FindControl requer que os controlos tenham ID exclusivos.
Detalhes da excepção: System.Web.HttpException: foram encontrados vários controlos com o mesmo ID '_909b6e15b33'. FindControl requer que os controlos tenham ID exclusivos.
Nota A palavra "web" é transformada em maiúscula incorrectamente nesta mensagem de erro.
Nota Para mais informações sobre os controlos de utilizador e a colocação em cache de saída, consulte a secção "Referências" deste artigo.
Este problema ocorre porque um nome exclusivo é transmitido para a função de LoadCachedControl quando controlos dinâmicos são criados a partir da cache. Este nome exclusivo destina-se a ser o ID exclusivo atribuído a esta instância do controlo de utilizador carregados de forma dinâmica. No entanto, é utilizado um código gerado e o código gerado não é único em toda os controlos de utilizador carregados de forma dinâmica. Este comportamento faz com que o problema mencionado na secção "Sintomas" deste artigo.
837000 o PartialCachingControl.CachedControl a propriedade devolve sempre uma referência nula
Importante Esta correcção contém dois tipos de pacotes: um pacote do Microsoft Windows Installer e um pacote de Gestor de componentes opcionais (OCM). Se utilizar o Windows Server 2003, tem de especificar que requerem a actualização do Windows Server 2003 (OCM), uma vez que a protecção de ficheiros do Windows Server 2003 monitoriza os ficheiros do .NET Framework 1.1. Se utilizar um sistema operativo que é diferente do Windows Server 2003, terá de continuar a utilizar o pacote Windows Installer.
Agora tem uma correcção suportada disponível na Microsoft, mas destina-se apenas a corrigir o problema descrito neste artigo. Aplique-apenas para sistemas que registam este problema específico. Esta correcção poderá ser submetida a testes adicionais. Por conseguinte, se não estiver a ser gravemente afectado por este problema, recomendamos que aguarde o próximo Microsoft .NET Framework 1.1 Service Pack 1 que contenha esta correcção.
Poderá ter de reiniciar o computador se quaisquer serviços ou aplicações em execução que utilizar ficheiros que estão listados na secção "Informações sobre os ficheiros" deste artigo.
A versão inglesa desta actualização de software tem os atributos de ficheiro (ou posteriores) listados na seguinte tabela. As datas e horas destes ficheiros são listadas na hora universal coordenada (UTC). Quando visualiza as informações do ficheiro, é convertido para a hora local. Para determinar a diferença entre a UTC e a hora local, utilize o separador Fuso horário na ferramenta Data e hora no painel de controlo.
Criar a pasta Web, por exemplo, crie a pasta \inetpub\wwwrooot\PageCaching.
Utilize o seguinte código para criar um controlo de utilizador denominada Test1.ascx e, em seguida, guardá-lo para a pasta da Web que foi criada no passo 1:
Utilize o seguinte código para criar um controlo de utilizador denominada Test2.ascx e, em seguida, guardá-lo para a pasta da Web que foi criada no passo 1:
Utilize o seguinte código para criar um formulário Web que tem o nome PageCaching.aspx e, em seguida, guardá-lo para a pasta da Web que foi criada no passo 1:
Navegue para http://localhost/PageCaching/PageCaching.aspx. Recebe a mensagem de erro descrita na secção "Sintomas" deste artigo.
Utilizando a classe PartialCachingControl
A classe de PartialCachingControl tem uma propriedade CacheControl . A propriedade CacheControl pode ser utilizada para determinar se um utilizador o controlo tenha já sido colocadas em cache. A propriedade CacheControl devolve o controlo de utilizador apenas quando não está em cache a saída da produção de controlo de utilizador. Se existir a saída de controlo de utilizador na cache de saída, a propriedade CacheControl devolve uma referência nula porque o controlo nunca é instanciado (no Microsoft Visual Basic, a propriedade CacheControl não devolve nada). No entanto, a propriedade CacheControl sempre devolve FALSO se a classe de PartialCachingControl não está na árvore de controlo.