温故知新ASP.NET 2.0(C#)(7) - Profile(存储用户配置)

简介:
[索引页]
[源码下载]



温故知新ASP.NET 2.0(C#)(7) - Profile(存储用户配置)


作者: webabcd


介绍
ASP.NET 2.0 中的存储用户配置功能使您可以定义并存储要在整个应用程序中使用的基于用户的设置。而且,在用户未登录时,可以将这些设置存储在匿名配置文件中,然后在将来某个时间将其迁移到登录用户的配置文件中。


关键
1、配置<system.web>元素下的<profile>元素;如果需要支持匿名的话则还需要配置<system.web>元素下的<anonymousIdentification>元素。示例如下,仅为说明
<profile enabled="true" defaultProvider="SqlProfileProvider" inherits="CustomProfile"> 
            <providers> 
                <add name="SqlProfileProvider" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
                         connectionStringName="SqlConnectionString" 
                         applicationName="/" /> 
            </providers> 
            <properties> 
                <add name="Name" /> 
                <add name="Color" type="System.Drawing.Color" /> 
                <group name="Group"> 
                    <add name="Collection" type="System.Collections.ArrayList" /> 
                    <add name="Price" type="int" defaultValue="100" /> 
                </group> 
            </properties> 
        </profile> 

        <anonymousIdentification 
            enabled="true" 
            cookieName=".VS2005_ANONYMOUS" 
            cookieTimeout="1440" 
            cookiePath="/" 
            cookieRequireSSL="false" 
            cookieSlidingExpiration="true" 
            cookieProtection="All" 
            cookieless="UseCookies" />
各属性详细说明参看MSDN,索引处查找“profile 元素”和“anonymousIdentification 元素”

注意:
<profile>元素的inherits属性指定自定义类,该类要继承自ProfileBase

Profile是自动保存的,但是某些复杂类型可能无法自动保存,此时需要设置<profile>元素的automaticSaveEnabled设置为false,要保存的话则调用 Profile 上的 Save 方法即可。要动态取消Profile的自动保存功能的话则需要在 global.asax 中加一个Profile_ProfileAutoSaving事件,示例如下,仅为说明
InBlock.gif void Profile_ProfileAutoSaving(Object sender, ProfileAutoSaveEventArgs e) 
InBlock.gif        { 
InBlock.gif                 if ((e.Context.Items[ "CancelProfileAutoSave"] !=  null) && (( bool)e.Context.Items[ "CancelProfileAutoSave"] ==  true)) 
InBlock.gif                        e.ContinueWithProfileAutoSave =  false
InBlock.gif        }
在需要取消Profile的自动保存功能的页的代码处如下写
InBlock.gif protected  void Page_Load( object sender, EventArgs e) 
InBlock.gif
InBlock.gif    Context.Items[ "CancelProfileAutoSave"] =  true;         
InBlock.gif}
 
 
2、通过ProfileManager执行相关任务,如搜索有关所有配置文件、经过身份验证用户的配置文件及匿名用户的配置文件的统计信息,确定在给定时间段内尚未修改的配置文件的数量,根据配置文件的上一次修改日期删除单个配置文件及多个配置文件等

3、将匿名配置文件迁移到经过身份验证的配置文件
在global.asax加一个Profile_MigrateAnonymous事件处理,示例如下,仅为说明
InBlock.gif void Profile_MigrateAnonymous(Object sender, ProfileMigrateEventArgs pe) 
InBlock.gif        { 
InBlock.gif             // 获得匿名配置 
InBlock.gif            ProfileCommon anonProfile = Profile.GetProfile(pe.AnonymousID); 
InBlock.gif 
InBlock.gif             // 从匿名配置中取值并赋值给经过身份验证的配置 
InBlock.gif             if (anonProfile.Color != System.Drawing.Color.Empty) 
InBlock.gif            { 
InBlock.gif                Profile.Color = anonProfile.Color; 
InBlock.gif            } 
InBlock.gif                 
InBlock.gif             // 从数据库中删除匿名配置 
InBlock.gif            ProfileManager.DeleteProfile(pe.AnonymousID); 
InBlock.gif                 
InBlock.gif             // 清除与某个会话关联的匿名 Cookie 或标识符 
InBlock.gif            AnonymousIdentificationModule.ClearAnonymousIdentifier();     
InBlock.gif        }
 
示例
App_Code/CustomProfile.cs
InBlock.gif using System; 
InBlock.gif using System.Data; 
InBlock.gif using System.Configuration; 
InBlock.gif using System.Web; 
InBlock.gif using System.Web.Security; 
InBlock.gif using System.Web.UI; 
InBlock.gif using System.Web.UI.WebControls; 
InBlock.gif using System.Web.UI.WebControls.WebParts; 
InBlock.gif using System.Web.UI.HtmlControls; 
InBlock.gif 
InBlock.gif using System.Web.Profile; 
InBlock.gif 
/// <summary> 
/// CustomProfile 的摘要说明 
/// </summary> 
InBlock.gif public  class CustomProfile : ProfileBase 
InBlock.gif
InBlock.gif         private  string _customName; 
InBlock.gif         public  string CustomName 
InBlock.gif        { 
InBlock.gif                get {  return ( string) base[ "CustomName"]; } 
InBlock.gif                set {  base[ "CustomName"] = value; } 
InBlock.gif        } 
InBlock.gif 
InBlock.gif         private  bool _customSex; 
InBlock.gif         public  bool CustomSex 
InBlock.gif        { 
InBlock.gif                get {  return ( bool) base[ "CustomSex"]; } 
InBlock.gif                set {  base[ "CustomSex"] = value; } 
InBlock.gif        } 
InBlock.gif}
 
web.config
<profile enabled="true" defaultProvider="SqlProfileProvider" inherits="CustomProfile"> 
            <providers> 
                <add name="SqlProfileProvider" type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
                         connectionStringName="SqlConnectionString" 
                         applicationName="/" /> 
            </providers> 
            <properties> 
                <add name="Name" /> 
                <add name="Color" type="System.Drawing.Color" /> 
                <group name="Group"> 
                    <add name="Collection" type="System.Collections.ArrayList" /> 
                    <add name="Price" type="int" defaultValue="100" /> 
                </group> 
            </properties> 
        </profile>
 
Profile/Test.aspx
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Test.aspx.cs" 
        Inherits="Profile_Test" Title="存储用户配置测试" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"> 
        <asp:Label ID="lbl" runat="Server" /> 
</asp:Content>
 
Profile/Test.aspx.cs
InBlock.gif using System; 
InBlock.gif using System.Data; 
InBlock.gif using System.Configuration; 
InBlock.gif using System.Collections; 
InBlock.gif using System.Web; 
InBlock.gif using System.Web.Security; 
InBlock.gif using System.Web.UI; 
InBlock.gif using System.Web.UI.WebControls; 
InBlock.gif using System.Web.UI.WebControls.WebParts; 
InBlock.gif using System.Web.UI.HtmlControls; 
InBlock.gif 
InBlock.gif public partial  class Profile_Test : System.Web.UI.Page 
InBlock.gif
InBlock.gif         protected  void Page_Load( object sender, EventArgs e) 
InBlock.gif        { 
InBlock.gif                 // 一看就懂 
InBlock.gif                Profile.Name = User.Identity.Name; 
InBlock.gif                Profile.Color = System.Drawing.Color.AliceBlue; 
InBlock.gif                Profile.Group.Collection.Clear(); 
InBlock.gif                Profile.Group.Collection.Add( "冰棍"); 
InBlock.gif                Profile.Group.Collection.Add( "瓜子"); 
InBlock.gif                Profile.Group.Price = 999999; 
InBlock.gif 
InBlock.gif                Profile.CustomName = User.Identity.Name; 
InBlock.gif                Profile.CustomSex =  true
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif                lbl.Text =  "Name:" + Profile.Name +  "<br />"
InBlock.gif                lbl.Text +=  "Color:" + Profile.Color.ToString() +  "<br />"
InBlock.gif                 foreach ( string s  in Profile.Group.Collection) 
InBlock.gif                { 
InBlock.gif                        lbl.Text +=  "商品有:" + s +  "<br />"
InBlock.gif                } 
InBlock.gif                lbl.Text +=  "价格:" + Profile.Group.Price +  "<br />"
InBlock.gif 
InBlock.gif                lbl.Text +=  "自定义类名字:" + Profile.CustomName +  "<br />"
InBlock.gif                lbl.Text +=  "自定义类姓名:" + Profile.CustomSex; 
InBlock.gif        } 
InBlock.gif}
 
用“abc”这个用户登录后的运行结果
Name:abc
Color:Color [AliceBlue]
商品有:冰棍
商品有:瓜子
价格:999999
自定义类名字:abc
自定义类姓名:True


注:需要用aspnet_regsql配置数据库


OK
[源码下载]
 
 


     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/344887,如需转载请自行联系原作者






相关文章
|
28天前
|
开发框架 .NET 中间件
C#/.NET快速上手学习资料集(让现在的自己不再迷茫)
C#/.NET快速上手学习资料集(让现在的自己不再迷茫)
|
1天前
|
存储 编解码 算法
C#.NET逃逸时间算法生成分形图像的毕业设计完成!晒晒功能
该文介绍了一个使用C#.NET Visual Studio 2008开发的程序,包含错误修复的Julia、Mandelbrot和优化过的Newton三种算法,生成色彩丰富的分形图像。作者改进了原始算法的效率,将内层循环的画点操作移至外部,提升性能。程序提供五种图形模式,支持放大缩小及颜色更新,并允许用户自定义画布大小以调整精度。还具备保存为高质JPG的功能。附有四张示例图片展示生成的分形效果。
|
3天前
|
Cloud Native API C#
C#的现代化:.NET Core引领的技术革命
【6月更文挑战第9天】`.NET Core引领C#现代化,实现跨平台革命,提升性能并支持云原生应用。异步编程模型优化体验,统一API简化开发流程。C#应用场景扩展,开发效率提高,技术创新加速,预示其未来在技术领域将持续发挥关键作用。`
22 10
|
5天前
|
开发框架 JSON .NET
学习ASP.NET 中的 默认应用程序配置源
默认主机配置源 使用命令行配置提供程序的命令行参数
9 2
|
8天前
|
XML 开发框架 人工智能
C#/.NET/.NET Core拾遗补漏合集(24年5月更新)
C#/.NET/.NET Core拾遗补漏合集(24年5月更新)
|
8天前
|
前端开发 Java C#
GitHub突破5k Star!这件事情我坚持了3年,努力打造C#/.NET/.NET Core全面的学习、工作、面试指南知识库
GitHub突破5k Star!这件事情我坚持了3年,努力打造C#/.NET/.NET Core全面的学习、工作、面试指南知识库
|
9天前
|
XML 开发框架 .NET
【.NET Core】常见C#代码约定
【.NET Core】常见C#代码约定
15 5
|
9天前
|
编译器 C#
【.NET Core】C#编程规范
【.NET Core】C#编程规范
6 0
|
9天前
|
编译器 C#
【.NET Core】深入理解C#中的特殊字符
【.NET Core】深入理解C#中的特殊字符
9 0
|
9天前
|
编译器 C# C++
【.NET Core】C#预处理器指令
【.NET Core】C#预处理器指令
11 1