CORRECTIF : vous recevez un message d'erreur plusieurs contrôles avec le même code lorsque vous ajoutez dynamiquement des contrôles utilisateur mis en cache pour les Webforms

Traductions disponibles Traductions disponibles
Numéro d'article: 834608 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Symptômes

Lorsque vous ajoutez dynamiquement des contrôles utilisateur mis en cache dans un Webform, vous recevez un message d'erreur est semblable à celui-ci lorsque vous naviguez vers le Web page :
Plusieurs contrôles avec le même code « _909b6e15b33 » a été trouvés. FindControl nécessite que les contrôles disposent des ID uniques.

Description : une exception non gérée produites pendant l'exécution de la demande web actuelle. Veuillez consulter la trace de pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception : System.Web.HttpException : plusieurs contrôles avec le même ID » _909b6e15b33 » a été trouvés. FindControl nécessite que les contrôles disposent des ID uniques.
note Le mot « web » est en majuscule incorrecte dans cette message d'erreur.

note Pour plus d'informations sur les contrôles de mise en cache et l'utilisateur sortie, reportez-vous à la section "Références" de cet article.

Cause

Ce problème se produit car un nom unique est transmis à la fonction LoadCachedControl lorsque les contrôles dynamiques sont créées à partir du cache. Ce nom unique est conçu pour être l'ID unique que celle indiquée à cette instance du contrôle utilisateur dynamiquement chargé. Toutefois, un numéro généré est utilisé et le code généré n'est pas unique dans les contrôles utilisateur dynamiquement chargé. Ce comportement provoque le problème mentionné dans la section « Symptômes » de cet article.

Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
837000 La propriété PartialCachingControl.CachedControl renvoie toujours une référence null

Résolution

important Ce correctif contient deux types de packages : un package Microsoft Windows Installer et un package Gestionnaire de composants optionnels (OCM). Si vous utilisez Windows Server 2003, vous devez spécifier que vous avez besoin la mise à jour de Windows Server 2003 (OCM), car la protection des fichiers Windows Server 2003 surveille les fichiers de .NET Framework 1.1. Si vous utilisez un système d'exploitation est différent de Windows Server 2003, vous devez continuer à utiliser le package Windows Installer.

Informations sur la mise à jour logicielle

Un correctif est désormais disponible auprès de Microsoft, mais il ne vise qu'à corriger le problème décrit dans cet article. Uniquement l'appliquer à des systèmes rencontrant ce problème spécifique. Ce correctif peut subir des tests supplémentaires. Par conséquent, si vous n'êtes pas gravement touché par ce problème, nous vous recommandons d'attendre le prochain Microsoft .NET Framework 1.1 Service Pack 1 qui comprendra ce correctif.

Pour résoudre ce problème immédiatement, contactez services de support technique Microsoft afin d'obtenir le correctif logiciel. Pour une liste complète des numéros de téléphone des services de support technique Microsoft et des informations sur les frais de support technique, reportez-vous au site de Web Microsoft suivant :
http://support.microsoft.com/contactus/?ws=support
note Dans certains cas, les frais aucuns de support peuvent être facturés si un technicien du support technique Microsoft détermine qu'une mise à jour spécifique peut résoudre votre problème. Les coûts habituels du support technique s'appliqueront aux autres questions et problèmes non traités par la mise à jour en question.

Demande de redémarrage

Vous devrez peut-être redémarrer votre ordinateur Si les services ou applications exécutent qui utiliser des fichiers qui sont répertoriés dans la section « Informations sur les fichiers » de cet article.

Informations de fichier

La version anglaise de cette mise à jour logicielle dispose des attributs de fichier (ou version ultérieure) répertoriés dans le tableau suivant. Les dates et heures de ces fichiers sont exprimées en coordinated universal temps (UTC). Lorsque vous affichez les informations de fichier, il est convertie en heure locale. Pour connaître le décalage entre l'heure UTC et l'heure locale, utilisez l'onglet Fuseau horaire dans l'outil Date et heure du Panneau de configuration.
   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

Statut

Microsoft a confirmé qu'il s'agit d'un problème les produits Microsoft répertoriés au début de cet article produits.

Plus d'informations

Procédure pour reproduire le problème

  1. Créer le dossier Web, par exemple, créez le dossier \inetpub\wwwrooot\PageCaching.
  2. Utilisez le code suivant pour créer un contrôle utilisateur nommé Test1.ascx et puis enregistrez-le dans le dossier Web créé dans l'étape 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. Utilisez le code suivant pour créer un contrôle utilisateur nommé Test2.ascx et puis enregistrez-le dans le dossier Web créé dans l'étape 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. Accédez à http://localhost/PageCaching/PageCaching.aspx. Vous recevez le message d'erreur est décrit dans la section « Symptômes » de cet article.
Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
824684 Description de la terminologie standard utilisée pour décrire les mises à jour logicielles Microsoft

À l'aide de la classe de contrôle PartialCachingControl

La classe de contrôle PartialCachingControl possède une propriété CacheControl . La propriété CacheControl peut être utilisée pour déterminer si un contrôle utilisateur est déjà en été cache. La propriété CacheControl renvoie le contrôle utilisateur uniquement lorsque la sortie de la sortie de contrôle utilisateur n'est pas mise en cache. Si la sortie du contrôle utilisateur existe dans le cache de sortie, la propriété CacheControl renvoie une référence null, car le contrôle est instancié jamais (dans Microsoft Visual Basic, la propriété CacheControl renvoie la valeur Nothing). Toutefois, la propriété CacheControl renvoie toujours Faux si la classe de contrôle PartialCachingControl n'est pas dans l'arborescence de contrôle.

Références

Pour plus d'informations, cliquez sur les numéros ci-dessous pour afficher les articles correspondants dans la Base de connaissances Microsoft :
306459 Présentation des contrôles serveur ASP.NET
308378 Comment effectuer le fragment de mise en cache dans ASP.NET à l'aide de Visual C# .NET
308645 Comment effectuer le fragment de mise en cache dans ASP.NET à l'aide de Visual Basic .NET

Propriétés

Numéro d'article: 834608 - Dernière mise à jour: vendredi 7 avril 2006 - Version: 4.2
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • 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
Mots-clés : 
kbmt kbqfe kbhotfixserver kbfix kbnetframe110presp1fix kbcodegen kbcode kbbug KB834608 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 834608
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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