ASP.NET 2.0 Login控件使用技巧(一) - 迁徙数据库,个性化Login控件

太久没有接触开发,前不久才开始学习一下 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"   />

    
< profile >

      
< properties >

        
< add  name  ="Department"  allowAnonymous ="true" />

        
< add  name  ="Project"  allowAnonymous ="true" />

      
</ properties >     

    
</ profile >

 正如上面的代码所示,<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来讲每个用户的所有个性化设置存储在一行数据中,在读取得时候根据分割符来区分数据。(说真的,我不知道那中间的代表什么,所以就说成分隔符,汗~~p.s. 关于这个分隔符,请参考另一篇随笔

4) 存储后的数据如何在前台读取呢?在用户成功登录系统后,我们可以就直接使用Profile.DepartmentProfile.Project来获取相对应的值了。

上面的操作中,我省略了很多知识点,比若说CreateUserWizard的实现阿,如何利用Membership代码实现用户注册阿之类,这些在网上内容很多,有兴趣的朋友可以Google一下即可知道。另一方面,可能上述有些地方可以用更好的方法实现,我也是第一次研究,还没有深入,如果大家知道,不妨说出来分享一下。谢谢哈~

到这里,朋友们都知道如何去自由的定义自己需要的属性和读取它们的值了,基本来说,Login控件已经被我们初步的征服,可以让我们随心所欲的修改,让它来按照我们的方式工作。接下来就是要谈谈角色了,以及角色在系统中的应用,这个留着下次写吧。 

 

   protected   void  CreateUserWizard1_CreatedUser( object  sender, EventArgs e)
    
{        
        TextBox txtDepartment 
= (TextBox)(this.CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("Department"));

        TextBox txtProject 
= (TextBox)(this.CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("Project"));

        ProfileCommon p 
=   
       (ProfileCommon)ProfileCommon.Create(CreateUserWizard1.UserName, 
true);

        p.Department 
= txtDepartment.Text;

        p.Project 
= txtProject.Text;

        p.Save();

     }



  方法中上面的两行代码主要是获取用户填写的数据,下面三行为存储数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值