我有一个asp.net mvc应用程序,它使用标准帐户控制器来处理身份验证。 客户要求我将新字段添加为电子邮件,城市,年龄以创建帐户。 哪个是扩展帐户控制器/模型的最佳方式? 我应该修改aspnet_users表还是应该用新字段创建一个新表?这是向AccountFormViewModel添加新字段的正确方法吗?
答案 0 :(得分:1)
我猜你有两个选择:
1)创建custom membership provider。
2)使用内置profile membership provider
无论如何,您必须实现/扩展您使用新MVC项目获得的AccountController和ViewModel。 如果选择第一个选项,则可以将字段添加到aspenet_users表中。 如果选择第二个选项,则使用框架希望您创建的配置文件表。
如果您想要字段的“超级集成”,可以考虑扩展IIdentity和IPrincipal接口。请查看this answer以获取更多信息。
希望有所帮助
答案 1 :(得分:1)
以下是扩展帐户控制器的类似帖子的链接。
答案 2 :(得分:0)
首先,您修改了RegisterModel帐户模型,然后添加新字段
public class RegisterModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
在AccountController中修改注册操作
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
WebSecurity.Login(model.UserName, model.Password);
using (var context = new ECDB())
{
var username = model.UserName;
var user = context.UserProfiles.SingleOrDefault(u => u.UserName == username);
user.FirstName = model.FirstName;
user.LastName = model.LastName;
user.Email = model.Email;
context.SaveChanges();
}
return RedirectToAction("Index", "Home");
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}
// If we got this far, something failed, redisplay form
return View(model);
}