asp.net – 如何在mvc中使用自定义成员身份添加更多自定义字段?
我已覆盖成员资格方法以创建自定义成员资格.
在帐户模型中,我重写了CreateUser方法: public override MembershipUser CreateUser(string username,string password,string email,string passwordQuestion,string passwordAnswer,bool isApproved,object providerUserKey,out MembershipCreateStatus status) { ValidatePasswordEventArgs args = new ValidatePasswordEventArgs( username,password,true); OnValidatingPassword(args); if (args.Cancel) { status = MembershipCreateStatus.InvalidPassword; return null; } if (RequiresUniqueEmail && GetUserNameByEmail(email) != "") { status = MembershipCreateStatus.DuplicateEmail; return null; } MembershipUser u = GetUser(username,false); if (u == null) { UserRepository _user = new UserRepository(); // Here I call my new method which has fields I've created in the // User table; I'm using entity framework. _user.CreateUser(username,email); status = MembershipCreateStatus.Success; return GetUser(username,false); } else { status = MembershipCreateStatus.DuplicateUserName; } return null; } public MembershipUser CreateUser(string username,string email) { using (CustomMembershipDB db = new CustomMembershipDB()) { User user = new User(); user.UserName = username; user.Email = email; user.PasswordSalt = CreateSalt(); user.Password = CreatePasswordHash(password,user.PasswordSalt); user.CreatedDate = DateTime.Now; user.IsActivated = false; user.IsLockedOut = false; user.LastLockedOutDate = DateTime.Now; user.LastLoginDate = DateTime.Now; //Generate an email key // user.NewEmailKey = GenerateKey(); db.AddToUsers(user); db.SaveChanges(); //send mail // SendMail(user); return GetUser(username); } } 现在我需要添加更多两个字段,如名字和姓氏,但我怎样才能将它传递给上面的方法? 如果我在其中添加诸如名字和姓氏之类的参数,则覆盖方法CreateUser会给我一个错误:( 解决方法
您可以保留AspNetUsers表,并创建一个新表来存储额外信息(链接到原始信息).这样您就不会破坏成员资格提供程序中的任何现有代码.
最初的AspNetUsers表有: 用于存储额外数据的新表可以具有例如: 这种方法的一个优点是,您可以创建多种类型的用户,每种用户将相关信息存储在不同的表中,而常用数据仍在原始表中. 如何: >首先更新RegisterViewModel以包含所需的额外数据. [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new ApplicationUser() { UserName = model.Email,Email = model.Email }; IdentityResult result = await UserManager.CreateAsync(user,model.Password); if (result.Succeeded) { // Start of new code ---------------------------------------- // Get Id of newly inserted user int userId = user.Id; // Get Id of newly inserted user // Create a profile referencing the userId AddUserProfile(userId,model); // End of new code ---------------------------------------- await SignInAsync(user,isPersistent: false); return RedirectToAction("Index","Home"); } else { AddErrors(result); } } return View(model); } >根据需要实现AddUserProfile(int userId,RegisterViewModel模型)方法.您将从模型对象中获取额外数据以及userId,并将新的配置文件对象保存在数据库中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-3 – ASP.Net MVC 3 ModelState.IsValid
- asp.net-mvc-3 – 带抽象类的mvc3 razor editortemplate
- asp.net-mvc – ASP.NET MVC是否有分页解决方案,在数据库中
- asp.net-mvc – MVC模型绑定:为什么我不能绑定到迭代器属性
- asp.net-mvc – .Net MVC3资源文件和多租户
- asp.net-mvc – 在html.actionlink上单击转到上一页
- asp.net-mvc – mvc 4 beginform with route name
- asp.net – 从Application_BeginRequest()中设置后,AsyncLo
- asp.net-mvc – 具有Fluent nHibernate和Ninject的多租户.每
- 如何让普通变量也支持事务回滚?
- 将Instant Messaging集成到ASP.NET应用程序中
- 将asp mvc3不显眼验证与jquery验证插件混合使用
- asp.net-mvc – 获取视图名称,其中ViewResult.Vi
- 实体框架 – 实体框架生成的类不在我需要的命名空
- ASP.NET Hang – 通用字典并发问题导致GC死锁
- asp.net删除未使用的httpmodules
- asp.net – Knockout.js – 数据绑定的javascrip
- asp.net-mvc-4 – Visual Studio 2012 Professio
- asp.net mvc 自定义pager封装与优化
- 具有多个身份验证过滤器的ASP.net Web API 2控制