Can';t清除ASP.NET CreateUserWizard控件上的凭据文本框

Can';t清除ASP.NET CreateUserWizard控件上的凭据文本框,asp.net,findcontrol,createuserwizard,Asp.net,Findcontrol,Createuserwizard,我有一个CreateUserWizard控件,在我的登录/创建用户页面上使用表单身份验证。我定制了CreateUserWizardStep1,以便添加一些额外的验证器 使用控件成功创建用户并显示“完成”后 您的帐户已成功创建。“我添加了一个附加按钮,该按钮将允许用户通过设置ActiveStepIndex=0来创建另一个用户。问题是,虽然它正确设置了ActiveStepIndex,但它保留了旧的用户帐户凭据。我尝试使用以下代码手动清除它们,但它们仍然会粘住……有人有什么想法吗 Protect

我有一个CreateUserWizard控件,在我的登录/创建用户页面上使用表单身份验证。我定制了CreateUserWizardStep1,以便添加一些额外的验证器

使用控件成功创建用户并显示“完成”后 您的帐户已成功创建。“我添加了一个附加按钮,该按钮将允许用户通过设置ActiveStepIndex=0来创建另一个用户。问题是,虽然它正确设置了ActiveStepIndex,但它保留了旧的用户帐户凭据。我尝试使用以下代码手动清除它们,但它们仍然会粘住……有人有什么想法吗

   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
它正确地找到了文本框,但实际上并没有重置它们的值,即使在调试器中它说它重置了


想法?

如果调用
Response.Redirect(Request.Url.ToString(),true)会发生什么情况?那会帮你清除一切

此外,FindControlIterative调用的递归性质会使代码运行起来非常昂贵,因为它必须深入到您要查找的每个控件的控件继承权中

代码的问题在于: 在向导控件中,ViewState不负责存储控件(如文本框)的修改值。这些控件实现IPostBackDataHandler接口。LoadPostBackData事件在页面生命周期中激发,其中控件的值从表单HTTP POST标头加载。。。由客户重新提交的内容

那么,如何销毁HTTP POST头以清除控制值呢

新请求将导致新的HTTP POST标头。。。只需在按钮单击事件处理程序中执行此操作:

Response.Redirect(Page.Request.Url.ToString())

这有一个额外的好处,它会转到向导的步骤1,因此您也不必执行。。。wiz.MoveTo(wiz.WizardSteps[0])


归功于Konrad-

我觉得发布这个…很傻,但我刚刚在CreateUserWizard控件上关闭了viewstate,就这样做了


谢谢你的帮助Daniel,我现在对ASP.NET如何存储信息有了更好的了解

这是可行的,但它也会生成一个隐藏字段,我用它作为标志来决定是否显示“您必须同意…”隐私策略JavaScript弹出窗口。我的原始代码有什么问题?请参阅我编辑的关于hpw的答案。值已设置。您可能必须存储该隐藏字段值并将其传递回页面,如果不敏感,可以在SessionState或URL中进行。