您的位置:首页 > 编程语言 > ASP

ASP.NET Web 部件个性化概览

2007-01-01 17:56 281 查看
在有些 Web 应用程序中,你可能需要允许用户对应用程序的用户界面和行为进行更改或个性化。ASP.NET Web 部件控件集在它的核心特征中提供了这个能力(个性化)。个性化允许 Web 部件控件的属性或状态能够被长期地保存,并且不受特定浏览器会话的约束。

个性化如何工作

个性化允许你为拥有若干特殊特征的 Web 部件控件而创建属性。可个性化的属性有:

与特定用户和 Web 页面的标识相约束。每个页面中的每个用户的可个性化控件的设定都可以被保存到个性化数据中。这个数据允许用户更改 Web 页面的 UI 并保存它们单独的偏好设置。

长期有效。被个性化的设定不受单个浏览器会话的约束。因为它们是长期被保存的,用户每次访问特定页面的时候,应用程序都可以获取该用户的相关设定。

个性化使用一个 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
参数来启用任何 Web 部件控件用于个性化的特定属性。除了自定义继承自
WebPart
类的控件之外(这同样适用于 ASP.NET 服务器控件、自定义控件、或者用户控件),任何控件都能够当成 Web 部件控件来使用。

提示:普通属性在无法像可个性化属性那样被保持的时候,对它们进行不同的处理是比较重要的。如果你在一个
WebPartZoneBase
区域中通过编程添加了
WebPart
控件或其他服务器控件,并且尝试通过编程来设置它的非个性化属性(例如,如果你在一个
Label
控件中设置
Text
属性),那么,这些属性将会在控件被添加之后全部被重置,因为这些属性的值不能够被长期保存。要长期保存这些属性,它们必须在源代码中使用
Personalizable
参数被标记。另外,如果你只需要在相同的浏览器会话请求之间保存这些属性(并不是长期保存),那么你可以选择使用视图状态。

个性化和其他 ASP.NET 特征

就个性化与使用其他几种用于保持 Web 应用程序视图数据的 ASP.NET 技术对比而言:

个性化是 Web 部件的一个特征。你不可以直接使用个性化本身。要使用个性化,你必须在一个
WebPartZone
元素中使用控件,这样这些控件才具备 Web 部件的功能。

提示:任何 ASP.NET 服务器控件、自定义控件、或用户控件都可以当成 Web 部件控件来使用,以获得个性化的优势。

个性化区别于视图状态。视图状态和个性化都用于保持控件的状态数据,但是视图状态数据只被保存在当前浏览器会话中,而个性化数据则是长期有效的。

个性化区别于档案。个性化只为 Web 页面中特定的控件保存用户状态数据。与用户相关的信息则是属于个人的,并且在 Web 应用程序中跨多个页面之间被使用(如某个购物车应用程序中的帐号信息),它应该被保持到档案中。关于更多详细内容,请参考“ASP.NET 档案属性概览”。

个性化中的关键概念

当你与 Web 部件控件一起使用个性化的时候,你应该了解影响个性化工作的几个概念。

第一个概念就是页面个性化范围。页面个性化范围是可以对页面中的个性化改变进行应用的用户范围。在任何特定的时间段中,一个 Web 部件页面只能进入两个可能的页面个性化范围中的其中一个,即共享的个性范围或用户个性化范围。在共享的个性化范围中,页面中的任何个性化改变会应用到所有用户;而在用户个性化范围中,页面中的个性化改变只会应用到当前的用户。

第二个相关概念就是控件的可见状态。控件的可见状态会检测特定控件对单独的用户或者所有用户是否可见。页面中的每个
WebPart
控件既可以是一个被共享的控件,对页面中的所有用户都可见,也可以是一个每用户控件,只对某个单独的用户可见。可见状态会通过控件被添加到页面中的方式而被检测。如果一个控件被 Web 页面的声明标记而被添加(静态控件),那么它总是被共享控件。如果一个控件被应用程序代码或者被用户从控件目录中进行选择而被添加(动态控件),那么页面的当前个性化范围会对可见状态会进行检测。如果页面是共享的范围,动态被添加的控件就是被共享的,如果页面是用户范围,那么控件就是一个每用户控件。

第三个重要概念就是属性范围。当你在源代码中使用
Personalize
参数为控件创建一个可个性化属性的时候,你可以为这个属性设置个性化范围(共享的范围或用户范围,默认时是用户范围)。这在超出控件属性可以为所有用户而个性化以及在页面范围是共享范围的情况下,仅为已授权用户而个性化而提供了更详细的控件。

综合起来,页面个性化范围的这些概念、控件可见状态、以及属性个性化范围为 Web 部件控件的被查看方式以及用户的个性化而创建了一系列的选项。下列表格概括了当用户在不同的范围内对 Web 部件控件进行个性化时的行为。

控件的可见状态共享范围中的页面用户范围中的页面
共享的控件(
WebPart
控件默认时是共享的)

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

在动态控件的情况下(控件通过编程被添加到页面,或者从控件目录),已授权用户可以永久地为所有用户删除它。

在静态控件的情况下(控件被声明在 .aspx 页面的标记中),它无法被删除,尽管已授权用户可以为所有用户关闭这个控件。

单独的用户不可以把个性化属性的范围改变成共享范围。它们可以个性化用户范围中的属性,并且这些属性的值优先于当页面是共享范围时被指定的属性值。如果控件中用户特定的个性化数据被丢失或者重置,用户范围中的属性会在页面是共享范围的时候恢复这些值。

单独的用户可以为他们自己关闭共享的控件(这些控件添加在 Page Catalog 中),但是它们不能被永久地删除。

每用户控件

在页面是共享范围的时候,这个控件不能够被个性化,因为这个控件并没有在页面中出现。只有在页面是用户范围的时候,这个控件才会在页面中出现。

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

单独的用户也可以永久地删除这个控件。

个性化组件的实质

下列表格显示了 Web 部件控件集中的两个基本的个性化组件,无论你直接使用还是间接地使用了个性化。

Web 部件控件描述
WebPartManager


管理页面中的所有 Web 部件、允许或禁止个性化、以及管理个性化数据的生命周期。每个 Web 部件页面中都必需有一个(并且是唯一的一个)
WebPartManager
控件。

WebPartPersonalization


实现完成个性化动作时所必需的逻辑。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: