1

我是 ASP.NET MVC 的新手,所以如果有人能提供以下场景的指导,那就太好了。

看一个场景,其中将有两种类型的成员可以注册到站点,客户和供应商。

每种类型都是一个成员,附加信息存储在单独的模型/表(即客户模型/表、供应商模型/表)中,以及默认的成员凭据(用户名、电子邮件、密码)。不确定最好的方法。欢迎任何建议?

每种类型都有一个单独的注册页面,成功注册后,他们将被添加到各自的角色(即客户、供应商)。

这是我正在使用的客户端模型。

public class Client
{
  // Will set this manually when creating a Client member
  [DatabaseGenerated(DatabaseGeneratedOption.None)]
  public int ClientId { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

目前我已经创建了一个 ViewModel 如下来处理客户端的注册

public class RegisterClient
{
  // Default ASP.NET MVC RegisterModel
  public RegisterModel RegisterModel { get; set; }
  public Client Client { get; set; }
}

以下是 ClientController 中的 Register 方法

public ActionResult Register()
{
  return View();
}

[HttpPost]
public ActionResult Register(RegisterClient model)
{
  if (ModelState.IsValid)
  {
    // Attempt to register the user
    MembershipCreateStatus createStatus;
    Membership.CreateUser(model.RegisterModel.UserName, model.RegisterModel.Password, model.RegisterModel.Email, null, null, true, null, out createStatus);

    if (createStatus == MembershipCreateStatus.Success)
    {
      FormsAuthentication.SetAuthCookie(model.RegisterModel.UserName, false /* createPersistentCookie */);
      Roles.AddUserToRole(model.RegisterModel.UserName, "Client");
      // Get UserId for Client <-> User relationship
      int id = int.Parse(Membership.GetUser(model.RegisterModel.UserName).ProviderUserKey.ToString());
      model.Client.UserProfileId = id;
      db.Clients.Add(model.Client);
      db.SaveChanges();
      return RedirectToAction("Index", "Home");
    }
    else
    {
      ModelState.AddModelError("", createStatus.ToString());
    }
  }
  // If we got this far, something failed, redisplay form
  return View(model);
}

这是一个合适的方法吗?我正在考虑让 Client 模型继承 MembershipUser。

然后,我如何创建客户页面列表以及他们的会员详细信息(即用户名和电子邮件)?

4

1 回答 1

1

我开发了一个具有两个用户级别的系统,存储类型特定信息的最简单方法是拥有单独的表,然后为它们分配链接信息,过去我为所有用户分配了一个客户 ID,然后将其记录在类型特定的表也是如此。当我想查找他们的信息时,我会检查用户的客户 ID,然后将其与要访问的记录的 ID 进行检查。

在您的情况下,我会在客户和供应商模型中添加一个关联 ID 列。关联 ID 可以是用户名,但我发现最好的方法是有一个单独的用户表,将 asp.net 成员资格中的用户名链接到关联 ID。然后,您可以通过在两个表中查找当前用户关联 ID 来轻松检查用户是客户还是供应商。这种方法意味着后者如果您的供应商或客户有许多用户帐户,他们都可以访问同一组数据。您仍然可以使用 ASP.Net 成员角色来执行部分授权,但您应该在向用户显示记录之前检查关联 ID。

2012 年 2 月 5 日更新:

您可以为您的用户和客户创建模型,如下所示。

public class User
{
    public int UserId{ get; set; }
    //This is from ASP.Net Membership
    public string Username { get; set; }
    public int AssosiateId { get; set; }
}

public class Client
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ClientId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    //This is the ID of the Assosiate - the same as the user's assosiate id
    public int AssosiateId { get; set; }
}

您将为供应商创建一个类似于上述客户的类。

于 2012-04-25T16:31:38.060 回答