Update Wenn Sie dynamisch zwischengespeicherte Benutzersteuerelemente WebForms hinzufügen, erhalten eine Fehlermeldung "Mehrerer Steuerelemente mit derselben ID"

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 834608 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Wenn Sie eine Webform dynamisch zwischengespeicherte Benutzersteuerelemente hinzufügen, erhalten Sie eine Fehlermeldung, ist ähnlich der folgenden, wenn Sie die Web page durchsuchen:
Mehrere Steuerelemente mit derselben ID '_909b6e15b33' Es wurden gefunden. FindControl muss Steuerelemente eindeutige IDs haben.

Beschreibung: Bei der Ausführung der aktuellen Webanforderung ist eine nicht behandelte Ausnahme aufgetreten. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über diesen Fehler anzuzeigen und festzustellen, wo dieser Fehler im Code verursacht wurde.

Ausnahmedetails: System.Web.HttpException: mehrere Steuerelemente mit der ID '_909b6e15b33' gefunden. FindControl muss Steuerelemente eindeutige IDs haben.
Hinweis: Das Wort "Web" wird in dieser Fehlermeldung falsch großgeschrieben.

Hinweis: Finden Sie weitere Informationen zum Zwischenspeichern und Benutzersteuerelemente Ausgabe im Abschnitt "Informationsquellen" dieses Artikels.

Ursache

Dieses Problem rührt ein eindeutiger Namen an die LoadCachedControl -Funktion übergeben wird, wenn dynamische Steuerelemente aus dem Cache erstellt werden. Dieser eindeutige Name ist als die eindeutige ID gedacht, die diese Instanz des Benutzersteuerelements dynamisch geladene zugewiesen ist. Jedoch eine generierte ID verwendet, und die generierte ID ist über die dynamisch geladenen Benutzersteuerelemente nicht eindeutig. Dieses Verhalten führt das Problem, das im Abschnitt "Problembeschreibung" dieses Artikels genannt wird.

Weitere Informationen finden Sie die folgende KB-Artikelnummer:
837000Die PartialCachingControl.CachedControl-Eigenschaft gibt immer ein null-Verweis zurück.

Lösung

wichtig Dieser Hotfix enthält zwei Pakettypen: ein Microsoft Windows Installer-Paket und ein Paket Manager für optionale Komponenten (OCM). Wenn Sie Windows Server 2003 verwenden, müssen Sie angeben, dass Sie das Update der Windows Server 2003 (OCM) benötigen, da Windows Server 2003-Dateischutz die .NET Framework 1.1-Dateien überwacht. Wenn Sie ein Betriebssystem, die sich von Windows Server 2003 unterscheidet verwenden, müssen Sie weiterhin das Windows Installer-Paket verwenden.

Updateinformationen

Ein Hotfix zur Behebung dieses Problems ist inzwischen bei Microsoft erhältlich; dieser Hotfix wurde jedoch ausschließlich zur Behebung des in diesem Artikel beschriebenen Problems entwickelt. Deshalb sollten Sie nur Systeme aktualisieren, bei denen dieses spezielle Problem auftritt. Dieser Hotfix wird unter Umständen zu einem späteren Zeitpunkt weiteren Tests unterzogen. Wenn durch dieses Problem nicht schwerwiegend beeinträchtigt ist, empfiehlt Microsoft daher, auf das nächste Microsoft .NET Framework 1.1 Service Pack 1 warten, das diesen Hotfix enthält.

Wenn Sie das Problem sofort beheben möchten, wenden Sie sich an Microsoft Product Support Services, um den Hotfix zu erhalten. Eine vollständige Liste mit Telefonnummern der Microsoft-Produktsupport und Informationen Supportkosten der folgenden Microsoft-Website:
http://support.microsoft.com/contactus/?ws=support
Hinweis: PLEASE DO NOT TRANSLATE and DELETE THIS PASSAGE. IT DOES NOT APPLY TO GERMANY.

Neustartanforderung

Sie müssen möglicherweise den Neustart, wenn alle Dienste oder Anwendungen, Ausführen aufgelisteten Dateien im Abschnitt "Datei Informationen" dieses Artikels verwenden.

Dateiinformationen

Die englische Version dieses Updates besitzt die Dateiattribute (oder höher), die in der folgenden Tabelle aufgelistet werden. Die Datums- und Uhrzeitangaben für diese Dateien werden in Coordinated Universal Time () angegeben. Wenn Sie sich die Dateiinformationen ansehen, werden diese Angaben in die lokale Zeit konvertiert. Um die Differenz zwischen UTC und der Ortszeit zu ermitteln verwenden Sie die Registerkarte Zeitzone des Tools ? Datum und Uhrzeit in der Systemsteuerung.
   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

Status

Microsoft hat bestätigt, dass dies ein Problem in den Microsoft-Produkten ist, die im Abschnitt "Gilt für" dieses Artikels aufgeführt sind.

Weitere Informationen

Schritte zum Reproduzieren des Problems

  1. Den Webordner erstellen, beispielsweise den Ordner \inetpub\wwwrooot\PageCaching erstellen.
  2. Verwenden Sie folgenden Code zum Erstellen eines Benutzersteuerelements mit dem Namen Test1.ascx, und speichern es in den Webordner, der in Schritt 1 erstellt wurde:
    <%@ 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. Verwenden Sie folgenden Code zum Erstellen eines Benutzersteuerelements mit dem Namen Test2.ascx, und speichern es in den Webordner, der in Schritt 1 erstellt wurde:
    <%@ 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. Wechseln Sie zu http://localhost/PageCaching/PageCaching.aspx. Sie erhalten die Fehlermeldung in Abschnitt "Problembeschreibung" dieses Artikels beschriebene.
Weitere Informationen finden Sie die folgende KB-Artikelnummer:
824684Erläuterung von Standardbegriffen bei Microsoft Softwareupdates

Mithilfe der Klasse PartialCachingControl zurück

Die PartialCachingControl zurück -Klasse verfügt über eine CacheControl -Eigenschaft. Um festzustellen, wenn ein Benutzersteuerelement bereits zwischengespeichert wurde, kann die CacheControl -Eigenschaft verwendet werden. Die CacheControl -Eigenschaft gibt das Benutzersteuerelement zurück, nur, wenn die Ausgabe der Benutzersteuerelementausgabe nicht zwischengespeichert wird. Wenn die Ausgabe des Benutzersteuerelements im Ausgabecache vorhanden ist, gibt die CacheControl --Eigenschaft ein null-Verweis zurück, da das Steuerelement nie (in Microsoft) instanziiert wird Visual Basic, die CacheControl -Eigenschaft Nothing zurück. Gibt jedoch zurück die CacheControl -Eigenschaft immer FALSE, wenn die Klasse PartialCachingControl zurück nicht in der Steuerelementstruktur ist.

Informationsquellen

Weitere Informationen finden Sie in den folgenden Artikeln der Microsoft Knowledge Base:
306459ASP.NET Servers Steuerelemente (Übersicht)
308378Zum Durchführen von Fragmentzwischenspeicherung in ASP.NET mit Visual c# .NET
308645Zum Durchführen von Fragmentzwischenspeicherung in ASP.NET mithilfe von Visual Basic .NET

Eigenschaften

Artikel-ID: 834608 - Geändert am: Freitag, 7. April 2006 - Version: 4.2
Die Informationen in diesem Artikel beziehen sich auf:
  • 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
Keywords: 
kbmt kbqfe kbhotfixserver kbfix kbnetframe110presp1fix kbcodegen kbcode kbbug KB834608 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 834608
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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