我正在构建一个更高级的注册过程,其中包含3个页面,第一页是一个用于获取用户名(电子邮件表单)和带有确认密码的表单。单击此页面上的按钮可在db中以未验证状态创建用户,并重定向到创建配置文件的页面。单击创建配置文件按钮并在数据库中创建配置文件后,重定向将转到信用卡信息页面,其中填写表单,验证信用卡,然后将该信息写入数据库中的表。
我已经在标题中禁用了登录用户显示,这样我就可以使用在信用卡页面之前输入的注册者名字和姓氏。由于登录需要identityUser并因此填充登录用户控件,如何将此对象从一个页面传递到另一个页面?
原始模板在用户中登录的代码 :(注意:我已注释掉登录代码)
Protected Sub CreateUser_Click(sender As Object, e As EventArgs)
Dim userName As String = UserNameCtrl.Text
Dim manager = New UserManager()
Dim newuser = New IdentityUser() With {.UserName = userName}
manager.UserValidator = New UserValidator(Of IdentityUser)(manager) With {.AllowOnlyAlphanumericUserNames = False}
Dim result = manager.Create(newuser, Password.Text)
If result.Succeeded Then
Session("email") = newuser.UserName
Session("userid") = newuser.Id.ToString()
'uncomment the code below if you want the auto sign in to occur
'IdentityHelper.SignIn(manager, newuser, isPersistent:=False)
IdentityHelper.RedirectToReturnUrl(Page.ResolveUrl("~/Account/CreateProfile.aspx?Guid=" & newuser.Id.ToString()), Response)
Else
ErrorMessage.Text = Encoder.HtmlEncode(result.Errors.FirstOrDefault())
End If
End Sub
我现在称这个例程在注册过程的第三页完成后登录用户。 (会话(“userid”)是新注册人生成的用户ID)
Private Sub SignInUserOnFormCompletion()
Dim manager = New UserManager()
manager.UserValidator = New UserValidator(Of IdentityUser)(manager) With {.AllowOnlyAlphanumericUserNames = False}
Dim newuser = New IdentityUser() With {.Id = Session("userid").ToString()}
IdentityHelper.SignIn(manager, newuser, isPersistent:=False)
End Sub
问题是上面的工作不起作用,因为newuser以某种方式具有不同的凭据。如何将原始newuser从第一页传递到第三页,我可以在SignInUserOnFormCompletion子例程中使用它?我是否创建了一个cookie并以这种方式传递它? 这对我来说是一个新主题,所以我不熟悉实现这一目标的正确方法。
答案 0 :(得分:0)
如果您使用多个页面作为向导排列,则需要在页面之间传递数据。
但是,如果您使用带有MultiView
或Wizard
控件的单个页面,则无需执行此操作。只需将当前页面排列为MultiView
内的单独视图,并使用Session
状态在帖子后面保留数据。