修正:「同じ ID を持つ複数のコントロール」のエラー メッセージ キャッシュされたユーザー コントロールを Webform に動的に追加するとき

現象

キャッシュされたユーザー コントロールを動的に、web フォームに追加する Web ページを参照するとき、次のようなエラー メッセージが表示されます。
同じ ID '_909b6e15b33' を持つ複数のコントロールが見つかりませんでした。だけでは、コントロールに一意の Id が必要です。


説明: 現在の web 要求の実行中に未処理の例外が発生しました。詳細については、エラーと、コードの発生元のスタック トレースを確認してください。



例外詳細: System.Web.HttpException: 同じ ID '_909b6e15b33' を持つ複数のコントロールが見つかりました。だけでは、コントロールに一意の Id が必要です。
注: 単語"web"は、このエラー メッセージで正しく大文字します。

注: 出力キャッシュとユーザー コントロールの詳細については、この資料の「関連情報」セクションを参照してください。

原因

この問題は、キャッシュからダイナミック コントロールを作成するときにLoadCachedControl関数に一意の名前が渡されるために発生します。この一意の名前は、動的に読み込まれたユーザー コントロールのこのインスタンスに割り当てられる一意の ID です。ただし、生成された ID を使用し、生成された ID は、動的に読み込まれたユーザー コントロールの間では一意ではありません。この現象には、この資料の「現象」に記載されている問題が発生します。

詳細については、次の文書番号をクリックしてマイクロソフト サポート技術資料を参照してください。

837000 PartialCachingControl.CachedControl プロパティは常に null 参照を返します

解決策

重要 この修正プログラムには、2 種類パッケージにはが含まれています: Microsoft Windows インストーラー パッケージ、および、オプション コンポーネント マネージャー (OCM) をパッケージします。Windows Server 2003 を使用する場合は、Windows Server 2003 ファイルの保護は、.NET Framework 1.1 のファイルを監視するため、Windows Server 2003 (OCM) 更新プログラムを要求することを指定する必要があります。Windows Server 2003 とは異なるオペレーティング システムを使用する場合は、Windows インストーラー パッケージを使用して続行する必要があります。

ソフトウェアの更新情報

サポートされている修正プログラムを用意していますが、この資料に記載されている問題の場合のみ使用することを推奨します。この特定の問題が発生しているシステムにのみ適用されます。この修正プログラムは、今後さらにテストを行うことがあります。この問題で深刻な影響を受けていない場合は、次 Microsoft.NET Framework 1.1 Service Pack 1 修正プログラムをダウンロードするまで待つことを勧めします。

この問題を解決するには、修正プログラムを入手するのには、マイクロソフト製品サポート サービスに問い合わせてください。マイクロソフト製品サポート サービスの電話番号とサポートのコストに関する情報の一覧については、次のマイクロソフト Web サイトを参照してください。注: 特別な場合では、まれに通常サポート コールの発生に料金 Microsoft Support 担当者は、特定の更新で問題が解決されると判断した。追加の質問および問題の特定のアップデートの対象にはなりませんが、通常のサポート料金が適用されます。

再起動の必要性

サービスまたはアプリケーションを実行しているいる場合に、コンピューターを再起動する必要がありますこの資料の「ファイル情報」セクションに記載されているファイルを使用します。

ファイル情報

このソフトウェア更新プログラムの英語バージョンがファイル属性を持つ (またはそれ以降) 次の表に記載されています。世界協定時刻 (UTC) では、日付と時刻これらのファイルが一覧表示されます。ファイル情報に表示される時刻は、ローカル時刻に変換されています。UTC とローカル時刻との差を検索するには、コントロール パネルの [日付と時刻]の[タイム ゾーン] タブを使用します。
   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

状況

マイクロソフトでは、この資料の冒頭に記載されているマイクロソフト製品に問題があることを認識しています。

詳細

問題を再現する手順を実行します。

  1. Web フォルダーを作成、たとえば、\inetpub\wwwrooot\PageCaching フォルダーを作成します。
  2. Test1.ascx、という名前のユーザー コントロールを作成する次のコードを使用し、手順 1 で作成した Web フォルダーに保存します。
    <%@ 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. Test2.ascx、という名前のユーザー コントロールを作成する次のコードを使用し、手順 1 で作成した Web フォルダーに保存します。
    <%@ 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. PageCaching.aspx、という名前の Web フォームを作成するのには次のコードを使用し、手順 1 で作成した Web フォルダーに保存します。
    <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. Http://localhost/PageCaching/PageCaching.aspx を参照します。この資料の「現象」に記載されているエラー メッセージが表示されます。
詳細については、次の文書番号をクリックしてマイクロソフト サポート技術資料を参照してください。

824684マイクロソフトのソフトウェア更新プログラムを記述するために使用される一般的な用語説明

PartialCachingControl クラスを使用します。

PartialCachingControlクラスには、 CacheControlプロパティがあります。CacheControlプロパティは、ユーザー コントロールが既にキャッシュされているかどうかの決定に使用できます。CacheControlプロパティは、ユーザー コントロールの出力の出力がキャッシュされていない場合にのみ、ユーザー コントロールを返します。ユーザー コントロールの出力は、出力キャッシュに存在する場合、 CacheControlプロパティは、(マイクロソフトの Visual Basic、 CacheControlプロパティは Nothing を返します) で、コントロールがインスタンス化されないために null 参照を返します。ただし、 CacheControlは常に FALSE を返しますPartialCachingControlクラスがコントロール ツリー内にない場合。

関連情報

詳細については、次の記事番号をクリックしてマイクロソフト サポート技術情報の記事を参照してください。

306459の ASP.NET サーバー コントロールの概要

308378 Visual C# .NET を使用して ASP.NET でフラグメントがキャッシュの実行方法

308645 Visual Basic .NET を使用して ASP.NET でフラグメントがキャッシュの実行方法

プロパティ

文書番号:834608 - 最終更新日: 2017/02/01 - リビジョン: 1

フィードバック