ASP.NET 3.5核心编程学习笔记(9):用户配置文件

用户配置文件简介

  在最抽象的层面,用户配置文件是一种由ASP.NET运行库组织到动态生成类中的属性集合。配置文件数据会按不同的用户分别保存。当程序运行页面被显示时,ASP.NET会动态创建配置文件对象,它包含开发者定义在数据模型中的相应类型的属性。该对象之后被添加到HttpContext对象中,可通过Profile属性获取。

数据模型的定义

  为使用ASP.NET配置文件,我们需要先确定所要使用的数据模型结构,然后将该数据模型通过配置文件附在页面中。用户配置文件的布局定义在web.config文件中。

  示例代码:

  
  
< system.web > ...... < profile > < properties > < add name = " BackColor " type = " string " /> < add name = " ForeColor " type = " string " /> </ properties > </ profile > </ system.web >

  所有通过<add>标签添加的属性会变为动态创建类的成员。

  配置文件中的用户配置会被自动生成一个类,如下所示:

  
  
namespace ASP { public class ProfileCommon : ProfileBase { public virtual string BackColor { get { ( string )GetPropertyValue( " BackColor " ); } set { SetPropertyValue( " BackColor " , value); } } public virtual string ForeColor { get { ( string )GetPropertyValue( " ForeColor " ); } set { SetPropertyValue( " ForeColor " , value); } } public virtual ProfileCommon GetProfile( string username) { object o = ProfileBase.Create(username); return (ProfileCommon)o; } ...... } }

  该类的实例会自动与Page类的Profile属性相关联,我们可通过Profile.BackColor这类语法来访问用户配置文件的属性。

集合类型的使用

  在上例中,我们使用的是单一的标量值,然后用户配置文件支持更高级的功能--集合类型和自定义类型。先看一下集合类型:

  
  
< properties > < add name = " Links " type = " System.Collections.Specialized.StringCollection " /> </ properties >

  非标量值必须按存储介质的要求进行序列化。serializeAs属性就是用于指示如何进行序列化的。该属性可取的值有String、Xml、Binary、ProviderSpecific。如果该属性值未被指定,默认类型为String。

自定义类型的使用

  只要自定义类型为可序列化类型,就能被用户配置文件所使用。我们可自己设计类,将其编译为程序集,然后将程序集名称添加到配置文件属性的类型信息中:

  
  
< properties > < add name = "ShoopingCart " type = "My.Namespace.DataContainer, MyAssembly " /> </ properties >

属性的分组

  <properties>区段可接受<group>元素,它允许我们对之间相关的属性进行组织。

  示例代码:

  
  
< properties >
...... <group name = "Font ">
<addd name="Name" type="string" defaultValue="verdana" />
        <addd name="SizeInPoints" type="int" defaultValue="8" /> </group > </ properties >

与页面的交互

  为启用或禁用用户配置文件功能,我们只需设置web.config文件<profile>元素的enabled属性。如果该值为false,则页面不能使用Profile属性。

匿名用户的处理

  虽然用户配置文件功能主要是为被验证用户设计的,但也能够存储匿名用户的配置文件数据。要启用匿名用户,首先要开启anonymousIdentification功能。

  示例代码:

  
  
< system.web > ......
  <anonymousIdentification enabled="true" /> < profile > < properties > < add name = " BackColor " type = " string " allowAnonymous="true" /> < add name = " ForeColor " type = " string " /> </ properties > </ profile > </ system.web >

  上述示例使匿名用户可设置背景颜色但不能设置前景颜色。

用户配置文件属性的访问

  在请求被处理前,ASP.NET会根据web.config文件中定义的用户配置文件信息动态创建一个类,页面的Profile属性会被设置为该类的实例。

个性化相关事件

  请求进入处理周期之前,个性化数据会被添加到某请求的HTTP上下文中,但哪个系统组件负责个性化数据的加载呢?为此,ASP.NET引入了一种新的模块ProfileModule。

  该模块本身有一对事件,分别在请求被谁后和请求即将结束时引发。如果个性化功能被关闭,该模块会立即返回,否则它会向应用程序引发Personalize事件,并加载当前用户配置文件中的个性化数据。在Personalize事件被引发时,个性化数据尚未加载。由HTTP模块引发的事件处理程序必须编写在global.asax中。

  
  
void Profile_Personalize( object sender, ProfileEventArgs e) { ProfileCommon profile = null // 如果当前用户为匿名用户,退出 if (User == null ) return ; // 管理员用户 if (User.IsInRole( " Administrators " )) profile = (ProfileCommon)ProfileBase.Create( " Administrator " ); else profile = (ProfileCommon)ProfileBase.Create( " User " ); if (profile != null ) e.Profile = profile; }

匿名用户数据的迁移

  通过分配给匿名用户唯一的ID,匿名用户也能存储和获取配置信息。但如果在某一时刻,该匿名用户决定在网站中创建一个帐户,就需要将其作为匿名用户时设置的配置信息迁移到新帐户上。

  当用户以匿名身份转而登录实名帐户时,个性化模块会引发MigrateAnonymous事件。合理处理该全局事件,能将匿名用户的设置导入已验证用户的配置文件中。

  示例代码:

  
  
void Profile_MigrateAnonymous( object sender, ProfileMigrateEventArgs e) { // 获取匿名用户配置文件 ProfileCommon anonProfile; anonProfile = Profile.GetProfile(e.AnonymousId); // 迁移匿名用户配置文件到实名用户帐户上 Profile.BackColor = anonProfile.BackColor; ...... }

用户配置文件提供程序

  用户配置文件由两部分构成:访问层和存储层。

  访问层提供了一个强类型模型,用于获取和设置属性值,还可以对用户身份进行管理。它会确保获取和存储的数据针对的是当前已登录的用户。

  存储导使用特殊的提供程序来执行与存取数据有关的任务。

用户配置文件提供程序的配置

  默认的提供程序由web.config文件描述相应功能区段的defaultProvider属性指定。默认情况下,如果未指定提供程序,将默认使用特定功能提供程序集合中的第一项。

  默认配置文件提供程序名为AspNetSqlProfileProvider,使用SQL Server 2005 Express作为数据存储。如下所示:

  
  
< profile > < providers > < add name = " AspNetSqlProfileProvider " ConnectionStringName = " LocalSqlServer " applicationName = " / " type = " System.Web.Profile.SqlProfileProvider " /> </ providers > </ profile >

  上述代码摘自machine.config文件。这里的LocalSqlServer不是到本地或远程SQL Server实例的连接字串,而是配置文件<connectionStrings>区段中的数据项名称。

自定义的用户配置文件提供程序

  我们可以编写自定义的用户配置文件提供程序,但自定义的用户配置文件提供程序类应继承于ProfileProvider类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值