Web 組件個人化概觀

Visual Studio 2010

更新:2007 年 11 月

在某些 Web 應用程式中,您可能想要讓使用者修改或個人化應用程式的使用者介面和行為。ASP.NET Web 組件控制項集合在它的其中一個核心功能 (個人化) 中提供了這項功能。個人化可讓 Web 組件控制項的屬性或狀態儲存在長期儲存區中,而不是繫結至特定的瀏覽器工作階段 (Session)。

個人化可讓您為具有數個唯一特性的 Web 組件控制項建立屬性。可個人化的屬性具有下列特性:

  • 繫結至特定使用者和 Web 網頁的識別。每位使用者針對每個網頁上可個人化控制項所進行的設定都可以儲存在個人化資料中。這些資料可讓使用者修改 Web 網頁上的 UI 並儲存其個別偏好設定。

  • 長久存留。個人化設定不會繫結至單一瀏覽器工作階段。因為它們儲存在長期儲存區中,所以應用程式可以在每次使用者造訪特定網頁時擷取使用者的設定。

    個人化會使用 ASP.NET 應用程式服務資料庫儲存個人化資料。根據預設,當 ASP.NET 應用程式第一次使用個人化或其中一個其他應用程式服務 (例如,角色、成員資格或設定檔) 時,ASP.NET 會在名為 "app_data" 的子資料夾中自動建立這個資料庫。根據預設,ASP.NET 還會建立資料庫做為單一 SQL Server Express 資料庫檔案,該資料庫檔案包含所有應用程式服務的資料庫結構描述 (Database Schema)。使用 Web.config 檔,您可以設定應用程式,以建立個人化的不同資料庫檔案。此外,在 Web.config 檔中,您還可以指定使用 SQL Server 資料庫儲存應用程式服務資料,而不是使用預設的 SQL Server Express 資料庫檔案。

  • 透過提供者 (Provider) 層保存。儲存和擷取個人化資料的機制由提供者元件和資料存放區組成。ASP.NET 包含預設的 Microsoft SQL 提供者和資料庫。您還可以建立自訂提供者,並設定其使用任何資料存放區。

  • 可在任何 Web 組件控制項上宣告。開發自訂控制項時,您可以在程式碼中加入 Personalizable 屬性 (Attribute),以啟用任何 Web 組件控制項上特定屬性的個人化。除了衍生自 WebPart 類別的自訂控制項之外,它還適用於 ASP.NET 伺服器控制項、自訂伺服器控制項或使用者控制項 (User Control),因為它們可以當做 Web 組件控制項。

    z36h8be9.alert_note(zh-tw,VS.100).gif注意事項:

    因為一般屬性無法像可個人化的屬性一樣保存,所以要以不同的方式處理它們,意識到這一點很重要。如果您以程式設計方式將 WebPart 控制項或其他伺服器控制項加入 WebPartZoneBase 區域,並嘗試以程式設計方式設定它的不可個人化屬性 (例如,如果設定 Label 控制項上的 Text 屬性),則在加入控制項之後便會將屬性重設為其預設值,因為這些屬性值無法保存在長期個人化儲存區中。若要將屬性 (Property) 保存在長期儲存區中,必須在原始程式碼中使用 Personalizable 屬性 (Attribute) 標記它們。或者,如果您只想在同一瀏覽器工作階段的要求中 (而不是長期儲存區中) 保存屬性,則可以使用檢視狀態。

個人化與其他 ASP.NET 技術在保存 Web 應用程式之狀態資料的方式上有下列幾處區別:

  • 個人化是 Web 組件的功能。您無法使用個人化本身。若要使用個人化,您必須使用 WebPartZone 內的控制項,這樣它們會具有 Web 組件功能。

    z36h8be9.alert_note(zh-tw,VS.100).gif注意事項:

    任何 ASP.NET 伺服器控制項、自訂控制項或使用者控制項,都能當做 Web 組件控制項,以利用個人化。

  • 個人化不同於檢視狀態。檢視狀態和個人化都保存控制項狀態資料,但檢視狀態資料只在目前瀏覽器工作階段期間保存,而個人化資料是長久存留的。

  • 個人化不同於設定檔。個人化只儲存特定 Web 網頁上控制項的使用者專屬狀態資料。與使用者個人相關的資訊,以及 Web 應用程式中在多個網頁上使用的資訊 (例如,購物車應用程式中的帳戶資訊) 都應該保留在設定檔中。如需詳細資訊,請參閱 ASP.NET 設定檔屬性概觀

對 Web 組件控制項使用個人化時,您應該了解影響個人化運作方式的幾個概念。

第一個概念是網頁個人化範圍。網頁個人化範圍即使用者可在網頁上套用個人化變更的範圍。無論何時,Web 組件頁面都在兩種可能的網頁個人化範圍的其中一個之內,即共用或使用者。在共用範圍中,網頁上的任何個人化變更都會套用至所有使用者;而在使用者範圍中,網頁上的個人化變更只會套用至目前使用者。

第二個相關概念是控制項可視性。控制項可視性判斷指定的控制項是只有個別使用者看得見,還是所有使用者都看得見。網頁上的每個 WebPart 控制項區分為兩種,一種是該網頁上所有使用者都看得見的共用控制項,一種是只有個別使用者才看得見的控制項。可視性由控制項加入網頁的方式決定。如果控制項是以在 Web 網頁標記中宣告的方式加入網頁 (靜態控制項),則它永遠是共用控制項。如果控制項是透過應用程式程式碼,或是藉由使用者從控制項目錄選取的方式加入網頁 (動態控制項),則可視性由網頁的目前個人化範圍決定。如果網頁在共用範圍中,則動態加入的控制項是共用控制項;如果網頁在使用者範圍中,則該控制項是個別使用者控制項。

第三個重要的概念是屬性範圍。當您在原始程式碼中使用 Personalizable 屬性 (Attribute) 建立控制項的可個人化屬性 (Property) 時,可將該屬性 (Property) 的個人化範圍設為 SharedUser (User 是預設範圍)。網頁範圍是 Shared 時,您可以詳細地控制哪些控制項屬性可由所有使用者個人化,而哪些屬性只可由授權的使用者個人化。

網頁個人化範圍、控制項可視性和屬性個人化範圍這些概念合併起來會建立一個選項範圍,用於判定使用者如何檢視和個人化 Web 組件控制項。下表摘要了使用者在不同範圍中個人化 Web 組件控制項時這些控制項的行為方式。

控制項可視性

共用範圍中的網頁

使用者範圍中的網頁

共用控制項 (根據預設,WebPart 控制項是共用控制項)

授權使用者可以個人化所有使用者之控制項的共用和使用者範圍屬性。

若為動態控制項 (以程式設計方式加入網頁的控制項,或從控制項目錄加入的控制項),授權使用者可為所有使用者永久地刪除它。

若為靜態控制項 (在 .aspx 網頁的標記中宣告的控制項),雖然授權使用者可為所有使用者關閉該控制項,但無法刪除它。

個別使用者無法個人化共用範圍的屬性。他們可以個人化使用者範圍的屬性,而且設定的屬性值會比網頁在共用範圍中時指派的屬性值優先考慮。如果控制項之使用者專屬的個人化資料已遺失或重設,則使用者範圍的屬性會還原成網頁在共用範圍中時它們所具有的值。

個別使用者可自行關閉共用控制項,以將其加入頁面目錄,但無法永久刪除它。

個別使用者控制項

共用範圍中的網頁無法個人化這個控制項,因為控制項根本不會出現在網頁上。只有網頁在使用者範圍中時,才會出現這個控制項。

個別使用者可自行個人化控制項的共用和使用者範圍可個人化屬性,因為控制項執行個體 (Instance) 是完全私用的。

個別使用者還可永久刪除控制項。

下表顯示 Web 組件控制項集合中的兩個基本個人化元件,您可以在使用個人化時直接或間接使用它們。

Web 組件控制項

描述

WebPartManager

管理網頁上的所有 Web 組件,啟用或停用個人化,以及管理個人化資料的生命週期。每個 Web 組件頁面需要 (也只需要) 一個 WebPartManager 控制項。

WebPartPersonalization

實作執行個人化動作所需的邏輯。

顯示: