ASP.NET 2.0中使用自定义provider2010-12-08 天极 廖煜嵘在ASP.NET 2.0中,新增加的membership provider功能,以及结合功能强大 的一系列注册,登陆控件,可以很方便地对用户的登陆和权限等进行管理(参见 <<ASP.NET 2.0登陆控件简介>>)。但是,可能大家会发现,ASP.NET 2.0自带的这些登陆控件和membership的管 理功能,默认的是和sql server 2005 express搭配使用的,那么,如何改成使 用SQL Server 2000或者是其他的数据源,如access,oracle等呢?如果自己想在 应用中,另外重新写一个对登陆用户或者用户权限等管理的应用,要如何修改呢 ?在本文中,将给出在ASP.NET 2.0中使用自定义provider,以配合登陆控件来实 现一个简单的登陆过程。为了明白ASP.NET 2.0中的provider是如何工作的,首先看下下面的结构图:

由上图可以清楚看到,在最上面的一层,是各类的登陆控件,下面一层是与 member有关的membership api。在Membership Api中,membership 类执行有关 对用户的操作,比如增加,删除用户,而MembershipUser类则存储有关用户的个 人信息,如用户名,密码,EMAIL等信息。在Visual Studio 2005 beta 2中,默认使用的是Sql express membership provider。Provider的作用,是起到沟通Membership Api以及数据库,使得用户 并不需要关心要使用的是何种数据库,全部的操作都可以用各类相应的数据 provider来实现。但很多时候,ASP.NET 2.0默认支持的provider是不能满足其需要的,我们可 以自己根据需要编写provider.在本文中,将介绍如何使用access数据库,建立 一个数据表,存放用户的信息。本文介绍的方法,也可以适用在其他数据库上。 首先,我们打开Visual Studio 2005 beta 2,选用VB.NET,新建一个WEB SITE站点。在这个例子中,为简单起见,我们设置一个用户注册表单,一个登陆 的表单,新用户可以先注册,之后进行登陆。接着,往默认的窗体中,拖放一个CreateUserWizard的控件,这是一个系统 提供的新建用户的自动控件,可以很方便地新建一个用户。为了页面美观,我们 点控件右上方的"智能感知",选择"auto format",在弹出的窗体中,再选 择"Elegant"样式,如下图所示:

当然,我们可以任意修改该控件的文字提示。这里我们为了让能使用户在注 册后能转到登陆页面,因此,设置该控件的ContinueDestinationPageUrl属性的 值为:Login.aspx,这个页面等下会编写。接着,再拖拉一个LoginView控件到default.aspx页面中。在该控件中,可以 设置两种模版:Anonymous模版,表示在用户未登陆前,访客看到的状态; LoggedIn 模版,表示等用户成功登陆后,看到的状态(这里可以设置一些文字 显示,比如欢迎进入等,同时一般会显示用户的名字)。在这里,我们在LoginView控件中的LoggedIn 模版中,我们输入"You are logged in",并且增加一个LoginName和一个LoginStatus控件。其中,LoginName 控件显示登陆后用户的ID,而LoginStatus控件,则当用户登陆后,会显示 logout(注销)的链接。如下两图所示:
