2

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

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

想法?

4

2 回答 2

2

如果你打电话会发生什么Response.Redirect(Request.Url.ToString(), true)?那应该为您清除一切。

此外,FindControlIterative 调用的递归特性会使您的代码运行起来非常昂贵,因为它必须深入了解您要查找的每个控件的控件层次结构。

您的代码的问题在于: 在 Wizard 控件中,ViewState 不负责为控件(例如 TextBoxes)存储修改后的值。这些控件实现 IPostBackDataHandler 接口。LoadPostBackData 事件在页面生命周期中触发,其中控件的 VALUES 从表单 HTTP POST 标头加载...由客户端重新提交...

那么如何销毁 HTTP POST Headers 来清除控制值呢?

一个新的请求会产生新的 HTTP POST 标头...只需在按钮单击事件处理程序中执行此操作:

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

这有一个额外的好处,它可以进入向导的第 1 步,因此您也不必这样做... wiz.MoveTo(wiz.WizardSteps[0])。

归功于 Konrad - ASP.Net 向导 - 如何清除 Web 控件的内容

于 2010-06-23T13:16:19.617 回答
1

我觉得发布这个很傻......,但我只是在 CreateUserWizard 控件上关闭了视图状态,然后就做到了。

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

于 2010-06-23T14:31:32.370 回答