ASP.NET Whidbey中personalization和membership的一些特征

在 ASP.NET Whidbey 中,一个基本的目标是,在开发应用程序时,减少开发时间和代码量。为了达到这一目的, ASP.NET Whidbey 提供了一系列的新特征,例如无需代码的数据绑定,新的服务器端控件,尤其是,在这篇文章中要重点讨论的个人化( personalization )和成员角色 (membership) ,来节省你的时间。

伴随着个人化和成员角色这两个新特征,第一步是要配置你用来存储个人化( personalization )和成员角色 (membership) 数据的提供者( provider )。虽然你可以自己创建 Access 或 SQL Server 数据库,手动添加必要的配置元素,更简单的方法是使用 ASP.NET Web Site Administration tool ,如图一。

图一

请注意,要成功的配置一个应用程序,你必须使用一个具有管理员权限的账号来登录。

要创建一个 Access 的 .mdb 文件来储存 personalization 的数据,你需要打开 ASP.NET Web Site Administration tool 。在一个叫 DATA 的文件夹下,会自动创建一个 AspNetDB.mdb 的文件。

图二

要配置 membership 的 provider ,你需要使用 ASP.NET Web Site Administration tool 的 Security 标签。最简单的方法是选择使用向导,如图三。

图三

在此刻, membership 的数据库会被创建,必须的配置元素也会被加入到 web.config 文件中。你需要做的,只是把所有用户加入到数据库,设置限制的页,以及创建一个 login 页面。

很重要的一点是,你可以注意到,为 personalization 和 membership 创建的数据库是相同的,所以你可以使用同样的 provider 。

除了内嵌的 Access 和 SQL Server 的 providers ,你可以创建自己定制的 providers ,然后使用这些 providers 来配置应用程序。也就是说,你如果有了一个以前的数据库,还是可以使用 membership 服务。

上面的都是理论方面的,接着我们来看一下实例。我会为各位读者展示使用 Access provider 来配置 personalization 和 membership ,在 membership 数据库中添加一个用户,添加 personalization 的属性,在一个页面中使用这些属性,分别是匿名用户和已登录的用户。

首先要创建一个 Web 站点,然后点击 Solution Explorer 窗口下的 ** Web Site Administration tool ** 按钮。(见图二)

接着,点 ** Security ** 标签,选择 ** Security Setup Wizard ** 单选钮,并点 ** Next ** 。第一步是很简单的信息,所以读一下,就可以选 ** Next ** 。第二步,选择 ** From the Internet ** 然后点 ** Next ** 。 "From the Internet" 是使用 ASP.NET 窗体验证来配置应用程序, "From a local area network" 使用 Windows 验证来配置应用程序。第三步,点 ** Next ** 来使用 Web Site Administration tool 已经自动创建的 AspNetDB.mdb 文件。接着点 ** Next ** 跳过第四步。在第五步,因为有测试的目的,至少要加上一个用户。第六步是创建访问规则。最后,按 ** Finish ** 退出向导。数据库已经建立, web.config 文件也被自动创建,加入了 Web 站点,里面包含了各种元素,文件如下:

 1<configuration>
 2<connectionstrings>
 3<add connectionstring="c:\inetpub\wwwroot\aspnetPRO_PM\DATA\AspNetDB.mdb" name="webAdminConnection631974613823397072"></add>
 4</connectionstrings>
 5<system.web>
 6<membership defaultprovider="AspNetDB">
 7<providers>
 8<add applicationname="/aspnetPRO_PM" connectionstringname="webAdminConnection631974613823397072" enablepasswordreset="true" enablepasswordretrieval="true" name="AspNetDB" passwordformat="Encrypted" requiresquestionandanswer="true" type="System.Web.Security.AccessMembershipProvider, 
 9
10System.Web, Version=1.1.3300.0, Culture=neutral, 
11
12PublicKeyToken=b03f5f7f11d50a3a"></add>
13</providers>
14</membership>
15<rolemanager defaultprovider="AspNetDB">
16<providers>
17<add applicationname="/aspnetPRO_PM" connectionstringname="webAdminConnection631974613823397072" name="AspNetDB" type="System.Web.Security.AccessRoleProvider, 
18
19System.Web, Version=1.1.3300.0, Culture=neutral, 
20
21PublicKeyToken=b03f5f7f11d50a3a"></add>
22</providers>
23</rolemanager>
24<authentication mode="Forms"></authentication>
25</system.web>
26</configuration>

如果要允许匿名用户访问你的站点, `

 1<anonymousidentification> ` ` 元素是必需的。  ` personalization  ` 部分包含两个属性,第一个属性,  ` ` theme  ` ` ,并不指定一个类型,所以可以当作一个字符串对待。第二个属性,  ` FavoriteColors  ,指定了  StringCollection  类作为它的类型。在这个属性中,如果想要存储不兼容  StringCollection  类的数据,都会抛出异常。 
 2
 3<anonymousidentification enabled="true"></anonymousidentification>
 4<personalization>
 5<profile>
 6<property allowanonymous="true" name="Theme"></property>
 7<property allowanonymous="true" name="FavoriteColors" serializeas="Xml" type="System.Collections.Specialized.StringCollection"></property>
 8</profile>
 9</personalization>
10
11现在,我们了解了配置  personalization  和定义一个  provider  ,现在是时候研究如何定义构成用户  profile  的  value  集了。你需要为你想存储的每个  profile  值添加一个  ** <property> ** 条目。事实上,你可以存储任何种类的对象,简单类型,字符串,布尔类型,或是复杂一点的,比如  collections  ,甚至是自定义的类型。 
12
13<profile>
14<property name="MessagesPerPage" type="int"></property>
15</profile>
16
17personalization  系统支持更复杂的类型,例如  collections  。事实上,你可以存储任何序列化的对象。其实定义一个复杂的属性和定义一个简单的属性没有太大的差别。接下来的代码,包含了简单和复杂的属性的定义。 
18
19<personalization defaultprovider="Access" enabled="true">
20<providers>
21<add connectionname="..." name="Access" type="... "></add>
22<add connectionname="..." name="SQL" type="... "></add>
23</providers>
24<profile>
25<property allowanonymous="false" name="EmailAddresses" provider="SQL" serializeas="Xml" type="System.Collection.Specialized.StringCollection"></property>
26<property defaultvalue="25" name="MessagesPerPage" type="int"></property>
27</profile>
28</personalization>
29
30定义好了用户的  profile  后,就可以开始进行编码。  ** Page  ** 类包括一个  profile  属性,也是  ** HTTPPersonalizationBase  ** 的子类。它有如下的成员列表: 
31
32![](http://dev.csdn.net/Develop/ArticleImages/25/25052/CSDN_Dev_Image_2004-3-11611556.png)
33
34图四 
35
36在  membership  特征中,  ASP.NET Whidbey  提供了很多的安全控件,下面是一个列表: 
37
38控件 
39
40| 
41
42功能   
43  
44---|---  
45  
46Login 
47
48| 
49
50为站点定制了所有的登录功能,不需要任何代码   
51  
52LoginView 
53
54| 
55
56可以选择几种不同的模板   
57  
58PasswordRecovery 
59
60| 
61
62“忘记密码”的控件,用选择问题和答案来验证用户身份   
63  
64LoginStatus 
65
66| 
67
68显示用户登录的状态   
69  
70LoginName 
71
72| 
73
74能将登录的用户显示到页面上   
75  
76我们举  PasswordRecovery  控件为例:在页面添加一个  PasswordRecovery  控件,  HTML  代码如下: 
77
78<form runat="server">
79<asp:passwordrecovery backcolor="#FFFFCC" bordercolor="#999999" borderstyle="Solid" borderwidth="1px" font-="" font-size="10pt" id="Passwordrecovery1" names="Verdana" runat="server" visible="true">
80<titletextstyle backcolor="#333399" font-bold="True" forecolor="#FFFFFF">
81</titletextstyle>
82</asp:passwordrecovery>
83</form>
84
85
86![](http://dev.csdn.net/Develop/ArticleImages/25/25052/CSDN_Dev_Image_2004-3-11611558.png)
87
88图五 
89
90我们可以看出,新一代的  ASP.NET Whidbey  ,控件已经做的非常完备,大大方便了程序员的开发效率,需要编写的代码越来越少了,让我们拭目以待吧!</property></anonymousidentification>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus