FIX: 您在 「 多個控制項使用相同的識別碼 」 時,收到錯誤訊息以動態方式將快取的使用者控制項加入至 Webforms

文章翻譯 文章翻譯
文章編號: 834608 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

徵狀

當您以動態方式將快取的使用者控制項加入至一個 Webform 時,會收到錯誤訊息,當您瀏覽至 Web 網頁時,會類似下列:
找不到具有相同的 ID '_909b6e15b33' 的多個控制項。FindControl 要求控制項有唯一的 ID。

描述: 目前的 Web 要求的執行過程中發生未處理的例外狀況。請檢閱堆疊追蹤關於該錯誤,以及它發源程式碼中的詳細資訊。

例外狀況詳細資料: System.Web.HttpException: 找不到具有相同的 ID '_909b6e15b33' 的多個控制項。FindControl 要求控制項有唯一的 ID。
附註字"Web"是不正確地大寫,此錯誤訊息中。

附註關於輸出快取和使用者控制項更多資訊,請參閱本文 < 參考 > 一節。

發生的原因

動態控制項建立從快取時,將會傳遞至 LoadCachedControl 函式的唯一的名稱,就會發生這個問題。此唯一的名稱被要提供給動態地載入的使用者控制項的這個執行個體的唯一 ID。 不過,產生的 ID 用來而且產生的識別碼不唯一跨動態地載入的使用者控制項。這種行為會造成本文的 < 徵狀 > 一節所述的問題。

如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
837000PartialCachingControl.CachedControl 屬性永遠傳回 null 參考

解決方案

重要此 Hotfix 包含兩種類型的套件: Microsoft Windows 安裝程式封裝和一個選用元件管理員 」 套件 (OCM)。如果您使用 Windows Server 2003 時,您必須指定您需要 Windows Server 2003 (OCM)] 更新因為 Windows Server 2003 檔案保護監視.NET Framework 1.1 檔案。如果您使用不同於 Windows Server 2003 的作業系統時,您必須繼續使用 Windows 安裝程式封裝。

軟體更新資訊

支援的 Hotfix 現在可以從 Microsoft,但它只用來修正本文所述的問題。僅適用於發生此特定問題的系統。此 Hotfix 可能會接受其他測試。因此,如果您不會嚴重影響這個問題,我們建議您等候下一個 Microsoft.NET Framework 1.1 Service Pack 1 包含此 Hotfix。

如果要立即解決這個問題,洽詢 Microsoft 技術支援部以取得該 Hotfix。如需 Microsoft 產品支援服務電話號碼及支援成本的相關資訊的完整清單,請造訪下列 Microsoft 網站]:
http://support.microsoft.com/contactus/?ws=support
附註 在特殊情況下通常會因支援電話所產生的費用可能就不收取如果 Microsoft 支援人員認為某特定更新程式可以解決您的問題。平常的支援成本將會套用到其他支援問題是所做不限定特定有問題的更新程式。

重新啟動需求

您可能必須重新啟動您的電腦,如果任何服務或應用程式正在執行,使用本文 < 檔案資訊 > 一節中的所列的檔案。

檔案資訊

此軟體更新的英文版具有檔案屬性 (或更新) 中如下表所列。這些檔案的日期和時間為 Coordinated Universal Time (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

狀況說明

Microsoft 已確認這是本文 < 適用於 > 一節中所列的 Microsoft 產品中的問題。

其他相關資訊

如果要重現問題的步驟

  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. 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. 瀏覽至 http://localhost/PageCaching/PageCaching.aspx。您會收到本文的 < 徵狀 > 一節所述之錯誤訊息。
如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
824684用來描述 Microsoft 軟體更新標準術語的說明

使用 PartialCachingControl 類別

PartialCachingControl 類別有 CacheControl 屬性。CacheControl 屬性來決定是否使用者控制項已快已經取。只在不會快取使用者控制項輸出的輸出時,CacheControl 屬性將傳回使用者控制項。如果輸出快取中存在使用者控制項輸出,CacheControl 屬性會傳回 null 參考,因為控制項無法執行個體化的 Microsoft Visual Basic,CacheControl 屬性會傳回 Nothing) 中。 不過,[CacheControl 屬性永遠傳回 FALSE 如果 PartialCachingControl 類別不在控制項樹狀結構中。

?考

如需詳細資訊按一下 [下列面的文件編號,檢視 「 Microsoft 知識庫 」 中發行項]:
306459ASP.NET 伺服器控制項概觀
308378如何執行藉由使用 Visual C#.NET 片段快取在 ASP.NET 中
308645如何執行藉由使用 Visual Basic.NET 片段快取在 ASP.NET 中

屬性

文章編號: 834608 - 上次校閱: 2006年4月7日 - 版次: 4.2
這篇文章中的資訊適用於:
  • Microsoft .NET Framework 1.1
  • Microsoft Visual Studio .NET 2003 專業版
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft ASP.NET 1.1
關鍵字:?
kbmt kbqfe kbhotfixserver kbfix kbnetframe110presp1fix kbcodegen kbcode kbbug KB834608 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:834608
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

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