我在登录/创建用户页面上使用表单身份验证创建了一个CreateUserWizard控件。我自定义了CreateUserWizardStep1,以便我可以添加一些额外的验证器。
使用控件成功创建用户后,显示“完成” 您的帐户已成功创建。“我添加了一个额外的按钮,允许此人通过设置ActiveStepIndex = 0来创建另一个用户。问题是,当它正确设置ActiveStepIndex时,它会保留旧的用户帐户凭据.I尝试使用以下代码手动清除它们,但它们仍然坚持......任何人都有任何想法?
Protected Sub btnCreateAnotherUser_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Me.cuwMain.ActiveStepIndex = 0
CleanCreateNewUserInput()
End Sub
Private Sub CleanCreateNewUserInput()
Dim txtUserName As TextBox
txtUserName = FindControlIterative(Me.cuwMain, "UserName")
txtUserName.Text = String.Empty
Dim txtPassword As TextBox
txtPassword = FindControlIterative(Me.cuwMain, "Password")
txtPassword.Text = String.Empty
Dim txtConfirmPassword As TextBox
txtConfirmPassword = FindControlIterative(Me.cuwMain, "ConfirmPassword")
txtConfirmPassword.Text = String.Empty
Dim txtEmail As TextBox
txtEmail = FindControlIterative(Me.cuwMain, "Email")
txtEmail.Text = String.Empty
Dim txtQuestion As TextBox
txtQuestion = FindControlIterative(Me.cuwMain, "Question")
txtQuestion.Text = String.Empty
Dim txtAnswer As TextBox
txtAnswer = FindControlIterative(Me.cuwMain, "Answer")
txtAnswer.Text = String.Empty
End Sub
它正确地找到了文本框,但它实际上并没有重置它们的值,即使它在调试器中也说明了它。
想法?
答案 0 :(得分:2)
如果致电Response.Redirect(Request.Url.ToString(), true)
会怎样?这应该为你清除一切。
此外,FindControlIterative调用的递归性质会使您的代码运行起来非常昂贵,因为它必须深入到您正在寻找的每个控件的控件层次。
您的代码存在的问题是: 在向导控件中,ViewState不负责存储TextBoxes等控件的修改值。这些控件实现了IPostBackDataHandler接口。 LoadPostBackData事件在页面生命周期中触发,其中控件的VALUES从表单HTTP POST头文件加载...由客户端重新提交...
那么如何销毁HTTP POST Headers来清除控件值?
新请求会导致新的HTTP POST标头...只需在按钮单击事件处理程序中执行此操作:
的Response.Redirect(Page.Request.Url.ToString());
这有额外的好处,它转到向导的第1步,所以你也不必做... wiz.MoveTo(wiz.WizardSteps [0])。
归功于康拉德 - ASP.Net Wizard - How to clear contents of web controls
答案 1 :(得分:1)
我觉得发布这个很傻......但是我刚刚在CreateUserWizard控件上关闭了viewstate并且就这样做了。
感谢Daniel的帮助,我现在对ASP.NET如何存储信息有了更好的理解。