对于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。
如何创建客户端的页面列表及其成员资格(即用户名和电子邮件)?
答案 0 :(得分:1)
我开发了一个具有两级用户的系统,并且存储类型特定信息的最简单方法是拥有单独的表,然后为它们分配链接信息,过去我为所有用户分配了一个客户ID,然后也将它记录在类型特定的表中。当我想查找他们的信息时,我会检查用户的客户ID,然后根据要访问的记录的ID进行检查。
我的情况我会在客户端和供应商模型中添加一个关联id列。关联ID可以是用户名,但我发现最好的方法是有一个单独的用户表,将asp.net成员资格中的用户名链接到关联ID。然后,您可以通过在两个表中查找当前用户关联ID来轻松检查用户是客户还是供应商。这种方法意味着后者如果您的供应商或客户拥有许多用户帐户,他们都可以访问同一组数据。您仍然可以使用ASP.Net成员资格角色来执行部分授权,但在向用户显示记录之前,您应该检查相关ID。
更新02/05/2012:
您可以为您的用户和客户创建模型,如下图所示。
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; }
}
您可以为供应商创建一个类似于上述客户的类。