asp.net2.0中Membership的扩展

本文介绍如何在ASP.NET应用程序中扩展用户注册功能,通过配置Web.config文件并利用Profile特性添加额外的用户信息字段如QQ和MSN。同时提供两种实现方式:手动编写代码和使用CreateUserWizard控件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天看了一下苏鹏老师的Membership扩展的webcast做的小例子。
如果使用vs2005提供的membership进行用户注册时,里面就那么几个字段,但是如果我们想着增加qqmsn字段,怎么办?有两种方法
1.利用profileprofile可以支持强类型和基本的数据类型;
2.aspnetdb数据库中新建一张aspnet_userinfo表与aspnet_user通过username进行关联(按视频上来的,还没有测试)
一、利用profile
1.配置web.config
首先,要配置数据库链接字符串(sql2000
<connectionStrings>
    <add name="DYJconnectionString="Data Source=.;Initial Catalog=aspnetdb;Persist Security Info=True;user id=sa;password=123providerName="System.Data.SqlClient"/>
  </connectionStrings>
其次,membershipprofile
   <profile enabled="truedefaultProvider="profileProvider"  >
 
      <providers>
         <add name="profileProvidertype="System.Web.Profile.SqlProfileProvider"
 connectionStringName="DYJ"  />
      </providers>
      <properties >
        <add name="MSNtype="String"/>
        <add name="QQtype="String"/>
      </properties>
    </profile>
    <membership>
      <providers>
        <remove name="AspNetSqlMembershipProvider" />
        <add connectionStringName="DYJenablePasswordRetrieval="false"
          enablePasswordReset="truerequiresQuestionAndAnswer="true"
          applicationName="/requiresUniqueEmail="falsepasswordFormat="Hashed"
          maxInvalidPasswordAttempts="3minRequiredPasswordLength="5"
          minRequiredNonalphanumericCharacters="0passwordAttemptWindow="10"
          passwordStrengthRegularExpression="" name="AspNetSqlMembershipProvider"
          type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      </providers>
    </membership>
    <roleManager enabled="true" />
这是web.config的工作就完了,如果你没有配置aspnet_regsql则默认存放在sql2005 express数据库中,即你的网站的app_data下面的数据库文件中,如果你想修改可以使用aspnet_regsql工具进行配置。
 
2.开始编写代码(主要是cs文件,aspx界面代码主要是几个文本框和按钮)
protected void Button1_Click(object sender, EventArgs e)
    {
        MembershipCreateStatus ms;
        MembershipUser newuser = Membership.CreateUser(Uname.Text, Upwd.Text, MSN.Text, SQ.Text, Ans.Text, trueout ms);
        if (ms == MembershipCreateStatus.Success)
        {
            ProfileCommon p = (ProfileCommon)ProfileCommon.Create(newuser.UserName, true);
            p.QQ = QQ.Text.Trim();
            p.MSN = MSN.Text.Trim();
            p.Save();
            msg.Text = "OK";
            Server.Transfer("default.aspx");
        }
        else
        {
            string errorcode;
            switch (ms)
            {
                case MembershipCreateStatus.DuplicateUserName:
                    msg.Text = "Username already exists.";
                    break;
 
            }
        }
    }
3.查看profile的信息
  public DataTable listalluser()//可以绑定到GridView
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("username", System.Type.GetType("System.String"));
        dt.Columns.Add("QQ", System.Type.GetType("System.String"));
        dt.Columns.Add("msn", System.Type.GetType("System.String"));
 
        MembershipUserCollection members = Membership.GetAllUsers();
        foreach (MembershipUser member in members)
        {
            DataRow dr = dt.NewRow();
            MembershipUser mu = Membership.GetUser(member.UserName);
            ProfileCommon p = Profile.GetProfile(member.UserName);
            dr[0] = mu.UserName;
            dr[1] = p.QQ;
            dr[2] = p.MSN;
            dt.Rows.Add(dr);
            dt.AcceptChanges();
        }
        return dt;
 
}
下面两步实现的功能与23是一样的,只是实现的方式不一样。下面是利用vs2005提供的CreateUserWizard控件来实现,唯一值得注意的是,要将控件转化成模板,操作方法:点击右上角的智能箭头,选择“自定义创建用户步骤”,这样就可以加入文本框之类的控件进行操作。哈哈,简单吧,要不说现在的程序员不值钱了呢,工具软件越来越智能,越来越简单了啊,全都成傻瓜型的了!
4.加入Profile属性信息,注意事件,直接双击CreateUserWizard控件即可
    protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
    {
        //TextBox qq = (TextBox)(this.CreateUserWizard1.FindControl("QQ"));
//虽然新加的文本框在ContentTemplate中而且看aspx代码与其他的控件也没有什么区别,但是通过上面的方法不能获取到TextBox的值,总是返回null,查了N久资料才找到下面的方法
        TextBox qq =(TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("QQ");
        TextBox msn = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("MSN");
        ProfileCommon p =
       (ProfileCommon)ProfileCommon.Create(CreateUserWizard1.UserName, true);
        p.QQ= qq.Text;
        p.MSN = msn.Text;
        p.Save();
}
5.通过UserName来获取Profile的属性,由于Profileaspnet_user表中的user_id绑定的,因此可以通过username来获取profile信息
    protected void Button1_Click(object sender, EventArgs e)
    {
        //通过用户名来获取存储在profile表中的profile属性值
        MembershipUser user = Membership.GetUser("teng_s2008");
        ProfileCommon common = Profile.GetProfile("teng_s2008");
        TextBox1.Text = common.MSN;
        TextBox2.Text = common.QQ;
    }
如果安照上面的步骤进行配置后,在数据库aspnetdb下面的表
aspnet_applications      aspnet_users  aspnet_profile   aspnet_Membership   中可以看到你刚才增加的记录。 
aspnet_applications: 存储当前系统名称,一般为你解决方案的名称。
Aspnet_user: 存储注册的用户的一些信息,例如用户ID,名称。(其它自己看吧)
Aspnet_profile: 存储注册用户的一些个性化参数,ok,我们可以看到我们定义的Department, Project均出现在这个表中,他们被存储在一个字段,一行数据中,以一些分隔符区分。
Aspnet_membership: 存储注册用户的一些细节信息,类似密码等。
但是我作的时候配置了aspnet_regsqluser信息都可以在数据库中看到,但是profile不能看到而且app_data下面增加了那个看着就不爽的数据库文件,后来查了查MSDN,找到aspnet_regsql后面参数的含义,重新执行了一下,OK了。(由于具体操作不是太清楚,错了也别怪我啊!!)
aspnet_regsql -S (local) -U sa -P 123 -d aspnetdb -A p
S:服务器;U:用户名;P:密码;d:数据库;-Aaddpprofile
注意大小写
 
哈哈,现在已经OK了,另一种方法还没有测试,下班了回家了!数据库中已经有记录了新建一个aspnet_userinfo,但是由于表中有数据不能建立外键关联,以后有时间在接着写了!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值