我正在使用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。
答案 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);
}