代码之家  ›  专栏  ›  技术社区  ›  bulltorious

无法清除ASP.NET CreateUserWizard控件上的凭据文本框

  •  2
  • bulltorious  · 技术社区  · 16 年前

    我在登录/创建用户页面上有一个使用窗体身份验证的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
    

    它正确地找到了文本框,但实际上并没有重置它们的值,即使在调试器中它说它重置了这些值。

    思想?

    2 回复  |  直到 16 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    如果你打电话怎么办 Response.Redirect(Request.Url.ToString(), true) ?这应该为你清理一切。

    此外,findcontrolIterative调用的递归性质会使代码运行起来相当昂贵,因为它必须深入到您要查找的每个控件的控件继承关系中。

    您的代码的问题是: 在向导控件中,viewstate不负责存储文本框等控件的修改值。这些控件实现IPostBackDataHandler接口。loadpostbackdata事件在页面生命周期中激发,其中控件的值从表单http post headers加载…由客户端重新提交…

    那么如何销毁HTTP Post头以清除控件值呢?

    新的请求会产生新的HTTP日志头…只需在按钮单击事件处理程序中执行此操作:

    response.redirect(page.request.url.toString());

    这有一个额外的好处,它将转到向导的步骤1,所以您也不必这样做…wiz.moveto(wiz.wizardsteps[0])。

    归功于康拉德- ASP.Net Wizard - How to clear contents of web controls

        2
  •  1
  •   bulltorious    16 年前

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

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

    推荐文章