REVISIÓN: Recibe un mensaje de error "Varios controles con el mismo identificador" cuando agrega dinámicamente a Webforms controles de usuario en caché

Seleccione idioma Seleccione idioma
Id. de artículo: 834608 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Síntomas

Al agregar dinámicamente controles de usuario en caché a un Webform, recibirá un mensaje de error que es similar al siguiente cuando explora la Web page:
Se encontraron varios controles con el mismo ID '_909b6e15b33'. FindControl requiere que los controles tengan identificadores únicos.

Descripción: Se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise la traza de la pila para obtener más información acerca del error y dónde se originó en el código.

Detalles de excepciones: System.Web.HttpException: se encontraron varios controles con el mismo ID '_909b6e15b33'. FindControl requiere que los controles tengan identificadores únicos.
Nota Está en mayúsculas la palabra "web" incorrectamente en este mensaje de error.

Nota Para obtener más información acerca de los controles de almacenamiento en caché y usuario de salida, vea la sección "Referencias" de este artículo.

Causa

Este problema se produce porque se pasa un nombre único a la función LoadCachedControl cuando se crean controles dinámicos de la caché. Este nombre único pretende ser el identificador único asignado a esta instancia del control de usuario cargado dinámicamente. Sin embargo, se utiliza un identificador generado y el identificador generado no es único entre los controles de usuario cargado dinámicamente. Este comportamiento hace que el problema que se menciona en la sección "Síntomas" de este artículo.

Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
837000La propiedad PartialCachingControl.CachedControl siempre devuelve una referencia nula

Solución

importante Este hotfix contiene dos tipos de paquetes: un paquete de Microsoft Windows Installer y un paquete de administrador de componentes opcional (OCM). Si utiliza Windows Server 2003, debe especificar que se requiere la actualización de Windows Server 2003 (OCM), porque la protección de archivos de Windows Server 2003 supervisa los archivos de .NET Framework 1.1. Si utiliza un sistema operativo que es diferente de Windows Server 2003, debe continuar utilizar el paquete Windows Installer.

Información de actualización de software

Ahora hay disponible un hotfix para el que Microsoft proporciona soporte técnico, pero que sólo se diseñó para corregir el problema descrito en este artículo. Aplíquelo sólo a sistemas que experimenten este problema específico. Este hotfix puede ser sometido a comprobaciones adicionales. Por lo tanto, si no se ve muy afectado por este problema, recomendamos que espere a que el siguiente Microsoft .NET Framework 1.1 Service Pack 1 que contenga este hotfix.

Para resolver este problema inmediatamente, póngase en contacto con soporte técnico de Microsoft para obtener la revisión. Para obtener una lista completa de los números de teléfono de los servicios de soporte técnico de Microsoft e información acerca de los costos de soporte, visite el siguiente sitio Web:
http://support.microsoft.com/contactus/?ws=support
Nota en casos especiales, los costos derivados normalmente de las llamadas al soporte técnico pueden cancelarse si un profesional de soporte técnico de Microsoft determina que una actualización específica resolverá el problema. Los costos habituales de soporte se aplicarán a las preguntas de soporte técnico adicionales y problemas que no guarden relación con la actualización en cuestión.

Requisito de reinicio

Quizás tenga que reiniciar el equipo si se ejecutan los servicios o aplicaciones que utilice los archivos que se enumeran en la sección "Información de archivos" de este artículo.

Información de archivo

La versión en inglés de esta actualización de software tiene los atributos de archivo (o posterior) que figuran en la tabla siguiente. Las fechas y horas de estos archivos aparecen en la hora universal coordinada (UTC). La información de los archivos se convertirá a la hora local cuando la vea. Para averiguar la diferencia entre hora UTC y la hora local, utilice la ficha zona horaria de la herramienta fecha y hora en el panel de control.
   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

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a".

Más información

Pasos para reproducir el problema

  1. Crear la carpeta Web, por ejemplo, cree la carpeta \inetpub\wwwrooot\PageCaching.
  2. Utilice el siguiente código para crear un control de usuario que se denomina Test1.ascx y guárdelo en la carpeta Web que se creó en el paso 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. Utilice el siguiente código para crear un control de usuario que se denomina Test2.ascx y guárdelo en la carpeta Web que se creó en el paso 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. Vaya a http://localhost/PageCaching/PageCaching.aspx. Recibirá el mensaje de error descrita en la sección "Síntomas" de este artículo.
Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
824684Descripción de la terminología estándar utilizada para describir las actualizaciones de software de Microsoft

Mediante la clase PartialCachingControl

La clase PartialCachingControl tiene una propiedad CacheControl . La propiedad CacheControl puede utilizarse para determinar si un control de usuario se ya ha almacenado en caché. La propiedad de CacheControl devuelve el control de usuario sólo cuando el resultado de la salida de control de usuario no está almacenado en caché. Si el resultado del control de usuario existe en la caché de resultados, la propiedad CacheControl devuelve una referencia nula porque el control nunca se crean instancias (en Microsoft Visual Basic, la propiedad CacheControl devuelve Nothing). Sin embargo, la propiedad CacheControl siempre devuelve FALSE si la clase PartialCachingControl no está en el árbol de control.

Referencias

Para obtener información adicional, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
306459Introducción a los controles de servidor de ASP.NET
308378Cómo realizar la caché fragmentada en ASP.NET utilizando Visual C# .NET
308645Cómo realizar la caché fragmentada en ASP.NET mediante Visual Basic .NET

Propiedades

Id. de artículo: 834608 - Última revisión: viernes, 07 de abril de 2006 - Versión: 4.2
La información de este artículo se refiere a:
  • Microsoft .NET Framework 1.1
  • Microsoft Visual Studio .NET 2003 Professional
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft ASP.NET 1.1
Palabras clave: 
kbmt kbqfe kbhotfixserver kbfix kbnetframe110presp1fix kbcodegen kbcode kbbug KB834608 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 834608

Enviar comentarios

 

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