6

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

  1. 如何使用户数据库成为我项目中的本地数据库?我认为 SQLEXPRESS 用于存储用户值,这似乎是一个神奇的过程。我如何去魔法化这个?我想对这个数据库的位置有更多的控制。

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

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

4

3 回答 3

8

我将从阅读这篇关于扩展 ASP.NET Membership API 的官方Microsoft 文章开始。它讨论了创建额外的表来存储有关用户的其他信息。

会员资料库

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

创建附加表

这部分实际上非常简单,由几个简短的步骤组成:

  1. 创建一个新表,即UserProfiles
  2. 添加一uniqueidentifier列作为主键,并将外键添加到 aspnet_Users 表
  3. 添加您要存储的任何其他字段(电话、地址、性别等)
  4. 如果您使用的是 LINQ-to-SQL 或实体框架,您只需将所需的表拖到设计器上,即可查询成员资格表。

这是一个关于使用的小例子

将此代码段添加到负责配置文件/帐户信息的存储库中。

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!

差不多就是这样!

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

于 2010-11-09T21:04:32.603 回答
3

我将从这里开始:

还有一篇很棒的文章系列(18 篇文章!!!)来自4GuysFromRolla的 Scott Mitchell 。

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

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

于 2010-11-09T20:50:58.130 回答
0

如果您仍在寻找对此的深入了解,我刚刚发现在 MVC 4 WebPages 站点中,有一个称为 SimpleMembership 提供程序的提供程序。它为存储在网站上的用户、角色和会员信息的开发人员提供了更多控制权。更多信息:http: //blog.osbornm.com/archive/2010/07/21/using-simplemembership-with-asp.net-webpages.aspx

于 2012-08-27T02:12:04.540 回答