Oprava: Obdržíte chybovou zprávu "Více ovládacích prvků se stejným ID" při dynamicky přidat ovládací prvky v mezipaměti do webových formulářů

Příznaky

Dynamicky přidat ovládací prvky v mezipaměti uživatele chcete-webový formulář, zobrazí chybová zpráva podobná následující při prohlížení webové stránky:
Bylo nalezeno více ovládacích prvků se stejným ID '_909b6e15b33'. FindControl vyžaduje ovládací prvky jedinečné identifikátory.


Popis: Při provádění aktuálního webového požadavku došlo k neošetřené výjimce. Zkontrolujte trasování zásobníku pro další informace o chybě a o jejím původu v kódu.



Podrobnosti o výjimce: System.Web.HttpException: bylo nalezeno více ovládacích prvků se stejným ID '_909b6e15b33'. FindControl vyžaduje ovládací prvky jedinečné identifikátory.
Poznámka: Slovo "web" je nesprávně kapitalizovány v této chybové zprávě.

Poznámka: Další informace o výstupní mezipaměti a uživatelské ovládací prvky naleznete v části "Odkazy" tohoto článku.

Příčina

K tomuto problému dochází, protože je jedinečný název je předán funkci LoadCachedControl při vytváření dynamických ovládacích prvků z mezipaměti. Tento jedinečný název má být jedinečné ID, který byl přidělen této instanci dynamicky načtené uživatelský ovládací prvek. Však používá vygenerované ID a vygenerované ID není jedinečné přes dynamicky načtené uživatelské ovládací prvky. Toto chování způsobí, že problém, který je uveden v části "Příznaky" tohoto článku.

Další informace získáte kliknutím na následující číslo v článku databáze Microsoft Knowledge Base:

837000 the PartialCachingControl.CachedControl vlastnost vždy vrátí hodnotu nulového odkazu

Řešení

Důležité: Tato oprava hotfix obsahuje dva typy balíčků: Instalační služba Microsoft Windows Installer balíčku a balíčku Správce nepovinných součástí (OCM). Pokud používáte systém Windows Server 2003, je třeba zadat, že požadujete aktualizaci Windows Server 2003 (OCM), protože Ochrana souborů aplikace systému Windows Server 2003 sleduje soubory rozhraní.NET Framework 1.1. Pokud používáte operační systém, který je odlišný od systému Windows Server 2003, je nutné použít balíček Instalační služba Windows Installer.

Informace o aktualizaci softwaru

Podporovaná oprava hotfix je nyní k dispozici od společnosti Microsoft, ale je určena pouze k odstranění problému popsaného v tomto článku. Použijte ji pouze systémy, ve kterých dochází k tomuto konkrétnímu problému. Tato oprava hotfix může být dále testována. Proto pokud jste závažně tento problém, doporučujeme počkat další Microsoft rozhraní.NET Framework 1.1 Service Pack 1, která obsahuje tuto opravu hotfix.

Chcete-li tento problém vyřešit okamžitě, obraťte se na služby technické podpory pro tuto opravu hotfix. Úplný seznam telefonních čísel služeb technické podpory společnosti Microsoft a informace o cenách podpory naleznete na následujícím webu společnosti Microsoft:Poznámka: Ve zvláštních případech mohou být stornovány poplatky, které jsou třeba obvykle zaplatit za telefonní hovory, pokud pracovník služeb podpory společnosti Microsoft určí, že konkrétní aktualizace odstraní váš problém. Výdaje na technickou podporu použije dalších otázek a problémů, které nelze vyřešit konkrétní aktualizací.

Požadavek na restartování

Bude pravděpodobně nutné restartovat počítač, pokud všechny služby nebo aplikace jsou spuštěny, použít soubory, které jsou uvedeny v části "Informace o souborech" tohoto článku.

Informace o souborech

Anglická verze této aktualizace softwaru má atributy souborů (nebo novější) uvedené v následující tabulce. Kalendářní data a časy jednotlivých souborů jsou uvedeny v koordinovaném světovém čase (UTC). Při zobrazení informací o souboru je převeden na místní čas. Rozdíl mezi časem UTC a místním časem, naleznete na kartě časové pásmo na panelu Datum a čas v okně Ovládací panely.
   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

Stav

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny v části "Platí pro" tohoto článku.

Další informace

Kroky pro reprodukci problému

  1. Vytvoření webové složky, například, vytvořte složku \inetpub\wwwrooot\PageCaching.
  2. Chcete-li vytvořit uživatelský ovládací prvek s názvem Test1.ascx použít následující kód a potom uložte do webové složky vytvořené v kroku 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. Chcete-li vytvořit uživatelský ovládací prvek s názvem Test2.ascx použít následující kód a potom uložte do webové složky vytvořené v kroku 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. Vytvořit webový formulář s názvem PageCaching.aspx pomocí následující kód a potom uložte do webové složky vytvořené v kroku 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. Přejděte na http://localhost/PageCaching/PageCaching.aspx. Zobrazí chybová zpráva, která je popsána v části "Příznaky" tohoto článku.
Další informace získáte kliknutím na následující číslo v článku databáze Microsoft Knowledge Base:

824684 Popis standardní terminologie používané při popisu aktualizací softwaru společnosti Microsoft

Pomocí třídy PartialCachingControl

Třída PartialCachingControlnastaveno CacheControl vlastnost. CacheControl vlastnost lze použít k určení, pokud již byla mezipaměti uživatelského ovládacího prvku. Pouze v případě, že výstup výstup uživatelského ovládacího prvku nejsou uloženy v mezipaměti, vrátí vlastnost nastaveno CacheControl uživatelský ovládací prvek. Existuje-li výstup uživatelského ovládacího prvku do mezipaměti, vlastnost nastaveno CacheControl vrátí hodnotu nulového odkazu, protože ovládací prvek nikdy vytvořena instance (v aplikaci Microsoft Visual Basic vlastnost nastaveno CacheControl vrátí Nothing). Však vlastnost nastaveno CacheControl vždy vrací hodnotu FALSE, pokud není PartialCachingControl třídy ve stromu ovládacích prvků.

Odkazy

Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:

Přehled ovládacích prvků serveru technologie ASP.NET 306459

308378 jak provést fragmentu mezipaměti v technologii ASP.NET pomocí aplikace Visual C# .NET

Jak 308645 provést fragmentu mezipaměti v technologii ASP.NET pomocí Visual Basic .NET

Vlastnosti

ID článku: 834608 - Poslední kontrola: 16. 1. 2017 - Revize: 1

Váš názor