ASP MVC用户配置文件

时间:2010-11-09 20:32:10

标签: asp.net sql asp.net-mvc asp.net-membership user-profile

我过去做过MVC,但我是ASP和ASP MVC的新手。到目前为止,我真的很喜欢ASP MVC为我提供的轻松,但我无法弄清楚如何更好地控制用户。默认情况下,MVC提供最小的用户注册表单。我看了很多,但我还有两个问题:

  1. 如何将用户数据库作为项目中的本地数据库?我认为SQLEXPRESS用于存储用户值,看起来像是一个神奇的过程。我怎么去魔法 - 如果这个?我想对这个数据库的位置有更多的控制权。

  2. 这导致另一个问题:如何扩展用户?我一直在读Profiles,但我仍然对一些事情感到困惑。如何准备个人资料并将其与用户链接?什么作为外键?而且,在我的控制器中,我如何访问用户的各个部分,如用户名,电子邮件,甚至从名字,姓氏,姓名等个人资料(虽然我猜有一次当我有个人资料的数据库和本地的用户数据库时,我可以运行sql命令检索数据)

  3. 我非常感谢指向正确的资源和/或ASP.NET的最佳实践

3 个答案:

答案 0 :(得分:8)

我首先阅读这篇关于扩展ASP.NET Membership API的官方Microsoft article。它讨论了如何创建额外的表来存储有关用户的其他信息。

会员数据库

  1. 如果您的现有数据库包含所有其他网站信息,则可以运行 aspnet_regsql.exe 工具来生成必要的用户表。然后,您需要修改web.config并添加SqlMembershipProvider以及连接字符串。
  2. 如果您正在创建一个新项目但没有数据库,请从已启用成员资格的新MVC项目开始。您的数据库将在首次使用时在App_Data文件夹中创建,您可以将其添加到SQL / SQLEXPRESS服务器中。然后,只需更改连接字符串以使用数据库服务器而不是本地文件。
  3. 创建其他表格

    这部分实际上非常简单,只包含几个简短的步骤:

    1. 创建一个新表,即UserProfiles
    2. 添加uniqueidentifier列作为主键,并将外键添加到aspnet_Users表
    3. 添加您要存储的任何其他字段(电话,地址,性别等)
    4. 如果您正在使用LINQ-to-SQL或Entity Framework,只需将所需的表拖到设计器上,就可以查询Membership表了。
    5. 以下是一些使用示例

      将此代码段添加到负责个人资料/帐户信息的存储库。

      public aspnet_User GetUser()
      {
          MembershipUser user = Membership.GetUser();
          return db.aspnet_Users.SingleOrDefault(u => u.UserId == user.ProviderUserKey);
      }
      

      然后在模型中,您可以获取用户并访问存储在UserProfiles表中的其他信息。

      AccountRepo accountRepo = new AccountRepo();
      aspnet_User user = accountRepo.GetUser();
      string Address = user.UserProfile.Address; // bingo!
      

      这就是它!

      这显然是一个简单的示例,您应该检查用户是否 null ,并且您还可以创建一个类,负责返回有关用户的必要信息,实现缓存等。

答案 1 :(得分:3)

我会从这里开始:

另外一篇精彩的文章系列(18篇文章!!!)来自4GuysFromRolla的Scott Mitchell。

ASP.NET成员资格模型被设计为具有可插入的体系结构。您可以编写自己的MembershipProvider实现,以满足您的需求。

即使您在网上找到的大多数示例都与ASP.NET Web表单相关,但与MVC一起使用时只有很小的差异。

答案 2 :(得分:0)

如果您仍在寻找对此的见解,我只是碰到了这样一个事实,即在MVC 4 WebPages网站中,有一个名为SimpleMembership提供商的提供商。它为开发者存储在网站上的用户,角色和会员信息提供了更多控制。更多信息: http://blog.osbornm.com/archive/2010/07/21/using-simplemembership-with-asp.net-webpages.aspx