Web 部件个性化设置概述

更新:2007 年 11 月

在某些 Web 应用程序中,可能希望允许用户修改(即个性化)应用程序的用户界面和行为。ASP.NET Web 部件控件集通过其核心功能之一(即个性化设置)提供了此功能。个性化设置使 Web 部件控件的属性或状态可保存在长期存储中并且不依赖于特定的浏览器会话。

个性化设置的工作方式

个性化设置使您可以为 Web 部件控件创建具有数个唯一特征的属性。可个性化的属性包括:

  • 依赖于特定用户和网页的标识。每一页上的每个用户的可个性化控件的设置都可以用个性化设置数据保存。这些数据使用户可以修改网页上的用户界面并保存其各个首选项。

  • 长寿命。个性化设置不依赖于单个浏览器会话。由于这些设置存储在长期存储中,因此在用户每次访问特定页时,应用程序就可以检索该用户的设置。

    个性化设置使用 ASP.NET 应用程序服务数据库存储个性化设置数据。默认情况下,在 ASP.NET 应用程序首次使用个性化设置或其他应用程序服务(如角色、成员资格或配置文件)之一时,ASP.NET 就会在名为“app_data”的子文件夹中自动创建此数据库。此外,默认情况下,ASP.NET 还将该数据库创建为一个 SQL Server Express 数据库文件,并包含所有应用程序服务的数据库架构。通过使用 Web.config 文件,可以对应用程序进行配置以便为个性化设置创建一个单独的数据库文件。而且,还可以在 Web.config 文件中指定一个 SQL Server 数据库而不是使用默认的 SQL Server Express 数据库文件来存储应用程序服务数据。

  • 通过提供程序层保留。存储和检索个性化设置数据的机制由一个提供程序组件和一个数据存储区组成。ASP.NET 包含一个默认的 Microsoft SQL 提供程序和数据库。您也可以创建一个自定义提供程序并将其配置为使用任何数据存储区。

  • 可在任意 Web 部件控件上声明。在开发自定义控件时,可以在代码中添加 Personalizable 属性 (Attribute) 以对要进行个性化设置的任意 Web 部件控件启用特定的属性 (Property)。除了从 WebPart 类派生的自定义控件外,这一特性也适用于 ASP.NET 服务器控件、自定义服务器控件或用户控件,因为这些控件都可以用作 Web 部件控件。

    z36h8be9.alert_note(zh-cn,VS.90).gif说明:

    必须认识到的一点是:普通属性的处理方式不同,因为不能像可个性化的属性一样保留它们。如果以编程方式将一个 WebPart 控件或其他服务器控件添加到 WebPartZoneBase 区域,并且试图以编程方式设置该控件的不可个性化的属性(例如,当您设置 Label 控件上的 Text 属性时),则在添加控件后这些属性将重置为其默认值,因为无法将这些属性值保留在个性化设置长期存储中。若要将这些属性 (Property) 保留在长期存储中,必须在源代码中将其标记为 Personalizable 属性 (Attribute)。或者,如果希望只在同一个浏览器会话(而不是在长期存储)中的各请求之间保留这些属性,可以使用视图状态。

个性化设置和其他 ASP.NET 功能

个性化设置在下列几个方面不同于用于保留 Web 应用程序状态数据的其他 ASP.NET 技术:

  • 个性化设置是 Web 部件的一项功能。不能单独使用个性化设置。若要使用个性化设置,必须在 WebPartZone 中使用控件,这样它们将具有 Web 部件功能。

    z36h8be9.alert_note(zh-cn,VS.90).gif说明:

    可以将任何 ASP.NET 服务器控件、自定义控件或用户控件用作 Web 部件控件以利用个性化设置功能。

  • 个性化设置不同于视图状态。视图状态和个性化设置都保留控件状态数据,但视图状态数据只在当前浏览器会话期间保留,而个性化设置数据则长期保留。

  • **个性化设置不同于配置文件。**个性化设置只存储特定网页上控件的用户特定的状态数据。有关用户个人的信息以及旨在跨 Web 应用程序中多个页使用的信息(如购物车应用程序中的帐户信息)应保留在配置文件中。有关更多信息,请参见 ASP.NET 配置文件属性概述

个性化设置中的主要概念

当对 Web 部件控件使用个性化设置时,应了解影响个性化设置工作方式的几个概念。

第一个概念是页个性化设置范围。页个性化设置范围是页上的个性化设置更改所应用的用户范围。在任意给定时间,Web 部件页位于下面两种可能的页个性化设置范围中的一种:共享或用户。在共享范围中,页上的所有个性化设置更改应用于所有用户;而在用户范围中,页上的个性化设置只应用于当前用户。

另一个相关的概念是控件可见性。控件可见性确定给定控件是对单个用户还是对所有用户可见。页上的每个 WebPart 控件或者是共享控件,或者是每用户控件;前者对该页上的所有用户均可见,后者只对单个用户可见。可见性由向页添加控件的方式确定。如果在网页的标记中通过声明添加了某控件(静态控件),则该控件始终是共享控件。如果通过应用程序代码或者通过用户从控件目录中选择的方法添加了某控件(动态控件),则可见性由页的当前个性化设置范围确定。如果该页位于共享范围中,则动态添加的控件是共享控件;如果该页位于用户范围中,则该控件是每用户控件。

下一个重要概念是属性范围。当通过在源代码中使用 Personalizable 属性 (Attribute) 在某控件上创建可个性化的属性 (Property) 时,可以将该属性 (Property) 的个性化设置范围设置为 Shared 或 User(User 是默认范围)。这对控件上可由所有用户进行个性化设置的属性提供了细节控制;而且当页范围为 Shared 时,只有授权用户才能对这些属性进行个性化设置。

页个性化设置范围、控件可见性及属性个性化设置范围这些概念结合在一起,构成了用户如何查看 Web 部件控件并对其进行个性化设置的选项范围。下表总结了用户在不同的范围中对 Web 部件控件进行个性化设置时这些控件的行为。

控件可见性

页位于共享范围中

页位于用户范围中

共享控件(默认情况下共享 WebPart 控件)

授权用户可以为所有用户对控件上的共享和用户范围的属性同时进行个性化设置。

对于动态控件(以编程方式或从控件目录添加到页的控件),授权用户可以为所有用户永久地删除它。

对于静态控件(在 .aspx 页的标记中声明的控件),尽管授权用户可以为所有用户关闭该控件,但不能将其删除。

单个用户不能对共享范围的属性进行个性化设置。这些用户可以对用户范围的属性进行个性化设置,并且这些属性的值优先于页位于共享范围时所分配的属性值。如果控件上用户特定的个性化设置数据丢失或重置,则用户范围的属性将恢复为在页位于共享范围时所具有的值。

单个用户可以自己关闭共享控件(这会将该控件添加到页目录中),但不能永久地删除它。

每用户控件

当页位于共享范围时,不能对该控件进行个性化设置,因为该控件根本不出现在该页上。只有当页位于用户范围时,该控件才会出现。

单个用户可以自己对该控件的共享和用户范围的可个性化属性同时进行个性化设置,因为该控件实例完全是私有的。

单个用户还可以永久地删除该控件。

基本的个性化设置组件

下表说明 Web 部件控件集内进行个性化设置所必需的两个组件;只要使用个性化设置,就可以直接或间接地使用这两个组件。

Web 部件控件

说明

WebPartManager

管理页上的所有 Web 部件、启用或禁用个性化设置以及管理个性化设置数据的生命周期。每个 Web 部件页需要一个(且只需要一个)WebPartManager 控件。

WebPartPersonalization

实现执行个性化设置操作所必需的逻辑。

请参见

概念

ASP.NET Web 部件概述

Web 部件个性化设置的使用要求

ASP.NET 配置文件属性概述

参考

Web 部件控件集概述