在 Web 組件應用程式中使用 ASP.NET 伺服器控制項
更新:2007 年 11 月
在 Web 組件應用程式中,主要使用者介面 (UI) 是由位於區域內的 ASP.NET 伺服器控制項所組成,此區域是網頁上具有一般 UI 的區域,而且是由衍生自 WebPartZoneBase 類別的複合控制項 (Composite Control) 型別所建立的。構成 Web 組件應用程式之主要 UI 的這些伺服器控制項之能力,是在基底 WebPart 類別中所定義,但是您並不限於使用衍生自這個類別的控制項。您也可以使用任何標準 ASP.NET 伺服器控制項、使用者控制項或自訂伺服器控制項。本主題會討論當控制項不是繼承自 WebPart 類別時,在 Web 組件應用程式中使用伺服器控制項的一些相關問題。
建立執行階段 Web 組件控制項
對於非繼承自 WebPart 類別的多種伺服器控制項,Web 組件控制項集合提供了一種機制,使其可以參與 Web 組件應用程式,並與衍生自 WebPart 類別的控制項具有相同能力。這並不需要開發人員執行任何特殊的動作,唯一需要的是將伺服器控制項加入至 WebPartZoneBase 區域。當 Web 網頁已編譯後,任何位於區域中且不是繼承自 WebPart 類別的伺服器控制項,會自動以 GenericWebPart 類別的執行個體包裝,並成為該執行個體的子控制項。由於 GenericWebPart 類別是繼承自 WebPart 類別,因此伺服器控制項現在具備了 WebPart 控制項的完整功能。基本上,開發人員可藉由將不是繼承自 WebPart 類別的伺服器控制項加入至 WebPartZoneBase 區域,讓控制項成為執行階段 WebPart 控制項。
注意事項: |
---|
如同可以在 Web 組件應用程式中使用伺服器控制項一樣,您也可以在 Web 組件應用程式外部使用 WebPart 控制項。如果您將繼承自 WebPart 類別的控制項加入至區域以外的網頁,該控制項會當做一般伺服器控制項來運作,並完全失去其 Web 組件能力。 |
將 ASP.NET 伺服器控制項加入至區域
當您將 ASP.NET 伺服器控制項、使用者控制項或自訂控制項加入至 WebPartZoneBase 區域時,不需要在網頁上使用特殊的技術或宣告。若要將這些控制項加入至區域中,可以使用一般用來將控制項加入至 Web 網頁的相同方式:以宣告方式 (採用頁面保存格式) 或以程式設計方式。此外,您可以使用 Web 組件目錄功能,此功能可讓您將伺服器控制項加入至目錄,使用者可在執行階段從該目錄中選取控制項並將其加入至網頁。如需詳細資訊,請參閱 DeclarativeCatalogPart 和 ImportCatalogPart 控制項。
如果您要以程式設計方式將伺服器控制項加入至區域,建議的處理方法是使用 WebPartManager 控制項的 AddWebPart 方法將其加入。
當您以宣告方式將不是 WebPart 控制項的伺服器控制項加入至區域時,如果您使用如 Microsoft Visual Studio 2005 的視覺化設計工具,將不會在屬性窗格或 IntelliSense 中看到 WebPart 屬性和成員。如需詳細資訊,請參閱下列章節,討論關於相較於其他伺服器控制項的使用,何時才使用 WebPart 控制項。
決定何時使用不同的伺服器控制項選項
因為您可以在 Web 組件應用程式中使用任何一種伺服器控制項,您可能會想知道是否真的有任何理由需要建立衍生自 WebPart 類別的控制項。
您必須考慮的關鍵因素是與衍生自 WebPart 類別而建立的伺服器控制項相對,採用現有伺服器控制項的優勢。下列方針可對您的決策有所幫助。
使用伺服器控制項
在許多情況下,要建立 Web 組件的慣用選項是使用 ASP.NET 伺服器控制項、使用者控制項或自訂控制項 (特別是如果這些控制項已經存在的話)。當使用這幾種伺服器控制項時,您並不會失去任何執行階段 Web 組件的功能,而且還可以獲得許多好處,例如重複使用現有程式碼的能力,以及運用控制項的開發知識並加以套用在 Web 組件應用程式上的能力。
同時,也可以藉由實作 WebPart 類別所實作的數個介面,使不同伺服器控制項的作用與真正的 WebPart 控制項一樣。這些介面包括:
IWebActionable 介面。如果您實作這個介面,便可以將自訂動作 (使用者可以在 UI 中之控制項上執行的一般動作,例如,最小化、關閉或編輯) 加入至控制項的動作功能表。
IWebEditable 介面。如果您實作這個介面,便可以使自訂 EditorPart 控制項與伺服器控制項產生關聯,讓使用者能於執行階段在控制項上編輯指定的自訂屬性和行為。
IWebPart 介面。如果您實作這個介面,您的控制項將具有繼承自 Part 類別之真正 WebPart 控制項的一些屬性,使該控制項與 WebPart 控制項有相同的外觀及操作,即使在設計階段也一樣。
衍生自 WebPart
藉由衍生自 WebPart 類別建立控制項所帶來的主要好處,在於您可以完全控制其 Web 組件的特定行為。
當控制項開發人員想要變更控制項的執行階段行為再將其轉散發給使用者時,正好做為上述情況的例子。則開發人員可以覆寫其中一個 WebPart 類別的虛擬屬性 (例如,AllowClose),並使其成為永遠傳回 false 的唯讀屬性。這可防止控制項有任何被關閉的可能,且會限制控制項的使用者使用該行為。
您可藉由繼承自 WebPart 類別獲得好處的第二個範例是與設計階段行為相關。在 WebPart 控制項上,網頁開發人員可以透過 IntelliSense (如果使用如 Microsoft Visual Studio 2005 的視覺化設計工具) 在執行階段看見所有公開 (Expose) 的 WebPart 成員,如此可讓他們以宣告式模式並在 [屬性] 窗格中使用屬性。相反地,如果您於設計階段在區域中宣告伺服器控制項,而這些控制項並不是 WebPart 控制項,您將無法在 IntelliSense 或 [屬性] 窗格中看到任何 WebPart 類別的特定成員 (雖然您仍可宣告這些成員)。 這是因為在設計階段,一般的伺服器控制項尚未以 GenericWebPart 物件來包裝,因此它不會具備將在執行階段擁有的 WebPart 功能。雖然您可以實作以上所列的介面,讓伺服器控制項有類似 WebPart 控制項的外觀和行為,不過通常比較簡單直接的方式是建立 WebPart 控制項。建立控制項封裝 (Package) 的控制項開發人員和廠商可從衍生自 WebPart 類別中獲益,因為如此可讓他們提供具備更豐富之設計階段功能的控制項。
結束
在結束時,如果不需要覆寫控制項的標準屬性,您可能會發現比較容易使用現有伺服器控制項,並使其成為 WebPart 控制項的一部分。
如果決定建立自訂 WebPart 控制項,則下列是有可能可以被覆寫的屬性:
做為 WebPart 控制項的使用者控制項
使用者控制項對 ASP.NET 開發人員而言是一個功能強大的選項,因為可以讓開發人員使用 Web 網頁中所用的相同宣告式語法,為控制項快速建置 (Build) 複雜的 UI,而且還提供簡便的方式跨多個網頁分割並重複使用程式碼。做為 ASP.NET 伺服器控制項的使用者控制項,也是非常適用於 Web 組件應用程式中的選項。使用者控制項可以直接加入至 WebPartZoneBase 區域,它們會當做執行階段 WebPart 控制項來運作,如前文中所述。它們也能與 Web 組件目錄功能搭配使用,例如,做為可以匯入的控制項,或用來封裝一組其他伺服器控制項,以供使用者選取並加入至網頁 (如需詳細資訊,請參閱 WebPartsListUserControlPath 屬性)。
重要事項: |
---|
請注意,在當做執行階段 WebPart 控制項使用的使用者控制項上,ASP.NET 輸出快取會停用。對於每個網頁要求,Web 組件控制項集合會要求控制項位於控制項樹狀結構中,如此某些如個人化 (如需詳細資訊,請參閱 Web 組件個人化概觀) 等 Web 組件功能才能運作。在快取使用者控制項的要求中 (如需詳細資訊,請參閱 @ OutputCache 指示詞),並不會將該控制項加入至控制項樹狀結構,因此,輸出快取與 Web 組件功能不相容,且不適用於在 Web 組件應用程式中當做 WebPart 控制項運作的使用者控制項。 |