将MembershipUser和Web.Profile绑定在一起为新创建的用户

时间:2010-10-30 16:15:53

标签: c# asp.net membership profile asp.net-mvc-3

我正在使用ASP.NET MVC 3.我正在Visual Studio项目模板中使用“Internet应用程序”选项的MVC项目中免费使用的内容。基本上,这会带来Forms身份验证,并提供一些管理用户登录和内容的基本元素。

我也使用网页配置文件来存储一些自定义字段。一切都很好。我使用SuperFunProfile作为Profile实例的包装器,以便更容易获取配置文件属性。

直到我想在签署用户后立即设置个人资料的属性。

我无法解决的问题是this.Request.RequestContext.HttpContext.Profile包含匿名用户的个人资料。如果他应该注册并登录,我怎样才能为用户获取新的个人资料?

    public ActionResult SignUp(SignUpModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            MembershipCreateStatus createStatus = this.MembershipService.CreateUser(model.UserName, model.Password, model.Email);

            if (createStatus == MembershipCreateStatus.Success)
            {
                this.FormsService.SignIn(model.UserName, false /* createPersistentCookie */);

                var profile = new SuperFunProfile(this.Request.RequestContext.HttpContext.Profile);
                profile.DisplayName = model.UserName;
                profile.Save();

                return RedirectToAction("Index", "Home");
            }
            else
            {
                ModelState.AddModelError(string.Empty, AccountValidation.ErrorCodeToString(createStatus));
            }
        }

我讨论了会员和Web.Profile,但我没有看到任何看起来会让我更接近我的目标。

也许我应该创建一个我将自己存储到数据库而不是使用Web.Profile的ProfileModel?我可以在MembershipUser.ProviderUserKey上键入,这样可以让我更容易在注册时创建一个ProfileModel。

1 个答案:

答案 0 :(得分:2)

我认为你可以使用MigrateAnonymous事件。

  

用户登录时(即他们何时登录)   停止匿名用户),   引发了MigrateAnonymous事件。您   可以处理此事件以进行迁移   来自用户匿名的信息   身份到新的身份验证   身份,如有必要。下列   代码示例显示了如何迁移   用户的信息   认证

在你的global.asax中使用类似

的内容
public void Profile_OnMigrateAnonymous(object sender, ProfileMigrateEventArgs args)
{
  ProfileCommon anonymousProfile = Profile.GetProfile(args.AnonymousID);

  Profile.ZipCode = anonymousProfile.ZipCode; //Your custom property
  Profile.CityAndState = anonymousProfile.CityAndState;//Your custom property
  Profile.StockSymbols = anonymousProfile.StockSymbols;//Your custom property

  ////////
  // Delete the anonymous profile. If the anonymous ID is not 
  // needed in the rest of the site, remove the anonymous cookie.

  ProfileManager.DeleteProfile(args.AnonymousID);
  AnonymousIdentificationModule.ClearAnonymousIdentifier(); 

  // Delete the user row that was created for the anonymous user.
  Membership.DeleteUser(args.AnonymousID, true);

}