Web 組件連接概觀
更新:2007 年 11 月
Web 組件控制項集合可以讓您建立伺服器控制項之間的連接,這樣已連接之控制項的總值和效益會超出個別且未連接之控制項的總值和效益。會提供完整且整合的一組連接元件,因此只需要最少的步驟、幾行程式碼,且不需要處理所有基礎複雜度和資料同步處理,就可以備妥現有的 WebPart (或是伺服器或使用者) 控制項,以形成連接。運用針對連接所啟用的控制項,可以在執行階段的控制項間建立動態 (Dynamic) 的程式設計連接,以及 Web 網頁標記中所宣告之靜態 (Static) 的預先定義連接。您也可以將使用者介面 (UI) 提供給使用者,讓他們在執行階段連接或中斷連接控制項,以及管理現有的連接。
連接可提供一些優點給使用者和程式開發人員。透過使用連接,使用者可以找到全新且有意義的方式來檢視他們的資料。假設您會建置 (Build) 應用程式,其中的伺服器控制項會連繫 Web 服務、傳回狀態之平均日溫度的歷程記錄,並以表格格式列出資料。如果使用者想要以不同方式彈性地檢視該資料,則可將伺服器控制項連接至圖表控制項,這個圖表控制項可利用表格式資料,並將它顯示在各種圖表檢視中。使用者甚至可以選擇是否顯示資料表中的資料,或是將溫度資料連接至圖表控制項。運用資料的新檢視,使用者可能會注意到以溫度表示的新趨勢和關聯性 (Relationship),較難以視覺化方式檢視表格格式的資料。
透過使用連接,程式開發人員可發現新的機會,進行程式碼重複使用,以及組合隔離控制項的功能。假設程式開發人員建立用來儲存使用者之地址資訊的控制項 (含郵遞區號),且讓此資訊一律可用來填入使用者訂購東西時的送貨地址表單。然後,程式開發人員會加入與特定郵遞區號相關的其他控制項,例如,在使用者區域中顯示天氣資訊和頭條新聞的控制項,以及在所指定郵遞區號內,依據分類來查詢商務的控制項。除了設計每個與儲存郵遞區號相同功能的新控制項外,程式開發人員也可以設計每個控制項來要求輸入郵遞區號。然後,程式開發人員只要將已儲存郵遞區號的控制項連接至天氣、新聞和商務清單控制項 (它們會將郵遞區號當成輸入) 即可。每個連接都會擴充原始控制項的使用性,並排除新控制項之程式碼中多餘的部分。
連接概念
Web 組件連接是兩個伺服器控制項之間的連結或關聯,而這個連結或關聯可讓它們共用資料。連接一律只能包含兩個控制項:一個是資料提供者 (Provider),而另一個是提供者之資料的消費者。控制項可以同時是消費者和提供者,且可將任何型別的伺服器控制項 (不論是 WebPart 控制項、自訂控制項或使用者控制項) 設計成參與連接。根據預設,提供者控制項可建立同時具有多個消費者的連接 (如前述的郵遞區號控制項範例,這個控制項會將郵遞區號提供給天氣資訊控制項、頭條新聞控制項和商務清單控制項)。消費者控制項預設一次只可連接一個提供者。
連接一律會發生在 Web 組件應用程式的內容中,這表示除了參與連接的這兩個伺服器控制項以外,在 Web 網頁上最少還需要兩個額外的控制項。其中一個是 WebPartManager 控制項,出現在每個含有 Web 組件控制項的網頁上。第二個必要控制項是繼承自 WebPartZoneBase 類別的區域 (如 WebPartZone 控制項)。形成連接的任何兩個伺服器控制項都必須位在 WebPartZoneBase 型別的區域內。
在連接關聯性中,每個消費者和提供者都至少有一個關聯的物件,稱為連接點 (Connection Point)。根據 ConnectionPoint 類別,連接點會包含伺服器控制項連接至另一個控制項的必要詳細資料,例如,控制項本身的型別、控制項可辨識的資料型別、連接點物件的 ID,以及控制項是否可形成多個連接。伺服器控制項可以有多個連接點。提供者的連接點是透過 ProviderConnectionPoint 類別的執行個體 (Instance) 予以定義,而消費者的連接點則是透過 ConsumerConnectionPoint 類別的執行個體予以定義。
若要形成連接,消費者和提供者必須可辨識相同型別的資料,而在 Web 組件中,連接是透過介面執行個體傳遞的。控制項可辨識的資料型別是指定在控制項之關聯的連接點中 (位於 InterfaceType 屬性中)。如果提供者和消費者可辨識相同型別的資料,則它們就是相容的。如果提供者和消費者不相容,則程式開發人員必須使用特殊的轉換程式物件,將提供者的資料轉譯成消費者可使用的格式。這個轉換程式物件繼承自基底 WebPartTransformer 類別,且程式開發人員可繼承自基底類別 (Base Class) 以開發自訂的轉換程式,或使用其中一個提供的轉換程式物件 (RowToFieldTransformer 或 RowToParametersTransformer)。
連接建立之後,它會內含於 WebPartConnection 物件中。連接物件會封裝連接的所有詳細資料,包含其消費者和提供者物件的參考、消費者和提供者的 ID、任何連接點和其 ID 的參考、任何與連接關聯之轉換程式的參考,以及連接狀態的詳細資料 (如它是否作用中,以及它是靜態或動態)。
使用 ConnectionsZone 控制項,可提供使用者方法來建立和管理連接。您可以在 Web 網頁上宣告 <asp:connectionszone> 項目,將執行階段 UI 提供給使用者,而這個執行階段 UI 可讓他們連接或中斷控制項的連接,以及設定特定的連接詳細資料。
連接的運作方式
Web 組件連接是以連接的「提取」模式為基礎,其中的消費者會取得提供者的資料。為了建立連接,做為資料提供者的控制項會定義通訊合約,表示它能提供的資料。另一個控制項則做為消費者,並具有通訊合約的相關知識,可用來擷取該資料。
建立連接的機制是特殊的回呼 (Callback) 方法:一個是是在消費者中,而一個是在提供者中。然而,Web 組件控制項集合會處理所有回呼和通訊詳細資料,因此程式開發人員需要採取的步驟會很少。如果程式開發人員想要使用最簡單的方式,則需要做的是在提供者中選取方法以做為回呼方法,並在原始程式碼中使用 ConnectionProvider 屬性 (Attribute) 來標記它。然後,在該方法內,傳回內含要傳遞給消費者之資料的介面執行個體。介面執行個體可以十分簡單 (例如,內含字串值 (如郵遞區號) 的單一屬性)。提供者可實作其中一個提供的介面 (IWebPartField、IWebPartRow 或 IWebPartTable),但在大部分情況下,最好是建立具有一或多個屬性或方法 (內含想要與消費者共用的資料) 之簡單且自訂的介面,並在提供者中實作該介面。消費者的回呼方法會擷取提供者之介面的執行個體。再者,程式開發人員需要的是辨識消費者中的哪個方法 (使用 ConnectionConsumer 屬性) 會擷取介面執行個體,並將它指派給一些內部變數以進行處理和呈現。請注意,在網頁和控制項循環的預先呈現階段期間會傳遞提供者資料,因此應計劃處理資料,並在預先呈現完成後更新消費者中的任何邏輯。
![]() |
---|
如前所述,消費者和提供者的介面型別必須相容,否則,它們必須使用 WebPartTransformer 物件來建立連接。 |
用來交換資料的管線是消費者和提供者的連接點。您可用數種方式建立控制項的連接點。如上段所述,可使用 ConnectionConsumerAttribute 或 ConnectionProviderAttribute 類別,而每個類別都會建立連接點。使用此方式,可在原始程式碼中,將 ConnectionConsumer 屬性加入至消費者的回呼方法中,同樣地,也可將 ConnectionProvider 屬性加入至提供者的回呼方法中。這樣會辨識各自的回呼方法,並讓您指定連接點的部分詳細資料 (如出現在使用者的 UI 中以形成連接的 ID 和顯示名稱)。另一個方式是透過繼承 ConnectionPoint 來建立自訂連接點,或是使用或繼承 ConsumerConnectionPoint 或 ProviderConnectionPoint 類別。如前所述,做為消費者或提供者的控制項,都可以擁有多個連接點。
控制項間的連接可以是靜態或動態的。靜態連接是在裝載網頁中以程式碼宣告,並建立於網頁的預先呈現階段。這能確保當使用者檢視網頁時,連線是處於作用中狀態。如需範例,請參閱 HOW TO:在兩個 Web 組件控制項之間宣告靜態連接。您可在控制項的程式碼中以程式的方式建立動態連接,也可以在裝載網頁上以宣告方式建立。如果在 Web 網頁的 WebPartZoneBase 區域內宣告兩個相容的伺服器控制項,並在網頁上宣告 ConnectionsZone 控制項的執行個體,則在執行階段期間,使用者可在控制項之間建立並設定動態連接。
Web 組件連線與其他 ASP.NET 功能
用於 Web 應用程式中控制項之間資訊的傳輸,而與其他 ASP.NET 技術以幾個方法的連線對比:
連線是 Web 組件的功能。您只可以連接專為 Web 組件連接所設計且位於 WebPartZoneBase 區域內的控制項。
注意事項:
如前所述,任何 ASP.NET 伺服器控制項、自訂控制項或使用者控制項,都可做為 Web 組件控制項,以利用連接。
連接不同於資料繫結。Web 組件區域的控制項之間的連接,會使用介面 (Interface) 來建立控制項之間的合約。資料繫結是控制項與儲存裝置或後端資料庫之間的連接。Web 組件連接只會在網頁的控制項之間移動資料。
您可以對連接進行個人化設定。表示已連接哪個控制項的連接設定可與其他個人化資料一起安全地儲存。如需個人化的詳細資訊,請參閱 Web 組件個人化概觀。
基本連接類別
下表顯示 Web 組件控制項集中的三個基本連接元件,您可以在使用連接時直接或間接使用它們。
Web 組件控制項 |
說明 |
---|---|
管理網頁之 Web 組件區域中的控制項間的所有連接。每個 Web 組件頁面需要 (也只需要) 一個 WebPartManager 控制項。 |
|
WebPartZoneBase 基底類別提供伺服器控制項用來連接和交換資料的必要內容。可繼承自基底類別以建立自訂的區域,或使用 WebPartZone 控制項做為實際區域,以包含與連接相關的伺服器控制項。 |
|
表示連接 (具有提供者和消費者的參考) 和連接的所有其他必要元件。 |
|
ConnectionPoint 基底類別會定義與消費者或提供者關聯的物件,並包含交換資料的必要詳細資料。ProviderConnectionPoint 是與提供者關聯,而 ConsumerConnectionPoint 是與消費者關聯。 |
|
提供 UI,讓使用者在伺服器控制項之間建立執行階段的動態連接。 |