太久没有接触开发,前不久才开始学习一下Visual Stuido 2005的一些新功能,结果刚上来个login 控件就把我拌了一下,呵呵。。
Login一系列的控件均是结合Membership, Roles和Profile来实现的。而这些机构的数据,按照默认的设置,是存储在SQL Server Express 数据库中,其还包括如ASP.NET配置信息等其他重要数据。然而,万一我们用的数据库不是Sql Server Express,那怎么办呢?这是我接触到的第一个问题。
问题一:迁移数据库
解决方法如下:
VS配带了一个工具来允许我们实现该数据库的迁移,可以迁移到我们自己的SQL Server 版本中。该工具是SQL注册工具,aspnet_regsql.exe,在开始菜单中找到Visual Studio 2005中的Visual Studio Tools中选择Open Visual Studio 2005 Command Prompt,输入上面工具名称即可打开工具进行配置。具体的方法和内容,包括使用参数的方法,在网上有一大堆,我就不再啰嗦了。执行最后的结果是可以将Sql Server Express中的实例安装到我们指定的数据库中。
在成功迁移后,我们就可以在数据库中和我们自己建立的表建立关系了。微软建立的这个实例可以说包括了用户管理,角色管理,个性化管理的所有操作,因此,我们完全可以在自己的数据库建模中,直接利用这些模块来节省开发时间,而且,在一定程度上,他们这些经过测试的代码,结构更在一定程度上增加了安全性,何乐而不为呢?我是坚信一点,在开发过程中,如果有一个现成的,经过测试是安全可靠的,而且是免费的,并能帮助到你的东西,用它,无需考虑。
走题了。。
Anyway, 在新的数据库中,从表名就可以辨别出表的内容,如果你愿意,你可以直接进行修改。。但是我没有那么做。之后,我兴冲冲的在前台放入Login控件,放入注册用户控件,运行,一切都看似非常的顺利。但是,我发现这些注册的信息都是固定的,我如何实现自己的注册信息呢?比如说,我需要有个Department和Project的选项。我原本单纯的以为,可以直接在数据库中修改表结构和存储过程,但是在我修改了表和存储过程后,发现在前台不知道怎么把值传给存储过程,汗。。如果再自己写,那微软这个也做的太。。。后来才知道,实现这个操作利用的是Profile, 个性化操作。这也是遇到的第二个问题:
问题二:个性化Login控件
解决方法如下:
对于Profile的设置,我们需要首先在Web.Config中配置自己所需要的Profile属性,例如Department和 Project. 代码如下:
正如上面的代码所示,<anonymousIdentification enabled="true" /> 允许匿名辨析,不加下面是定义的两个新的属性,Department和project, 均可匿名访问。在定义完后,我们在前台就可以利用Profile.Department和Profile.Project来进行相关操作。
我们跟着要做的是在创建用户的时候将这些信息一并存储到数据库。按照下面的步骤就可以实现:
1) 设置CreateUserWizard控件并加入Department和Project选项。
2) 添加CreateUserWizard的CreatedUser事件,在事件中,利用ProfileCommon来对我们定义的属性添加Value,并存入数据库。如下:
方法中上面的两行代码主要是获取用户填写的数据,下面三行为存储数据。
3) 执行完成后,我们可以检查一下我们的数据库,可以看到在下面这几个表中出现了我们定义的数据:
aspnet_applications
aspnet_users
aspnet_profile
aspnet_Membership
aspnet_applications: 存储当前系统名称,一般为你解决方案的名称。
Aspnet_user: 存储注册的用户的一些信息,例如用户ID,名称。(其它自己看吧)
Aspnet_profile: 存储注册用户的一些个性化参数,ok,我们可以看到我们定义的Department, Project均出现在这个表中,他们被存储在一个字段,一行数据中,以一些分隔符区分。
Aspnet_membership: 存储注册用户的一些细节信息,类似密码等。
我们可以看出,系统是根据application来讲每个用户的所有个性化设置存储在一行数据中,在读取得时候根据分割符来区分数据。(说真的,我不知道那中间的代表什么,所以就说成分隔符,汗~~)
4) 存储后的数据如何在前台读取呢?在用户成功登录系统后,我们可以就直接使用Profile.Department 或 Profile.Project来获取相对应的值了。
上面的操作中,我省略了很多知识点,比若说CreateUserWizard的实现阿,如何利用Membership代码实现用户注册阿之类,这些在网上内容很多,有兴趣的朋友可以Google一下即可知道。另一方面,可能上述有些地方可以用更好的方法实现,我也是第一次研究,还没有深入,如果大家知道,不妨说出来分享一下。谢谢哈~
到这里,朋友们都知道如何去自由的定义自己需要的属性和读取它们的值了,基本来说,Login控件已经被我们初步的征服,可以让我们随心所欲的修改,让它来按照我们的方式工作。接下来就是要谈谈角色了,以及角色在系统中的应用,这个留着下次写吧 .