Не удается очистить текстовые поля учетных данных в элементе управления ASP.NET CreateUserWizard - PullRequest
2 голосов
/ 23 июня 2010

У меня есть элемент управления 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 ]

2 голосов
/ 23 июня 2010

Что произойдет, если вы позвоните Response.Redirect(Request.Url.ToString(), true)? Это должно все прояснить для вас.

Кроме того, рекурсивный характер вызова FindControlIterative сделает ваш код довольно дорогим для выполнения, поскольку он должен детализировать иерархию элементов управления для каждого элемента управления, который вы ищете.

Проблема с вашим кодом в том, что: В элементе управления Wizard ViewState не отвечает за хранение измененных значений для таких элементов управления, как TextBoxes. Эти элементы управления реализуют интерфейс IPostBackDataHandler. Событие LoadPostBackData возникает в жизненном цикле страницы, в котором ЗНАЧЕНИЯ элементов управления загружаются из заголовков HTTP POST формы ... которые повторно отправляются клиентом ...

Итак, как уничтожить заголовки HTTP POST, чтобы очистить контрольные значения?

Новый запрос приводит к новым заголовкам HTTP POST ... просто сделайте это в обработчике события нажатия кнопки:

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

Это дает дополнительное преимущество, поскольку оно переходит к шагу 1 мастера, поэтому вам также не нужно делать ... wiz.MoveTo (wiz.WizardSteps [0]).

Кредит Конраду - Мастер ASP.Net - Как очистить содержимое веб-элементов управления

1 голос
/ 23 июня 2010

Я чувствую себя глупо, отправляя это ..., но я просто отключил viewstate на элементе управления CreateUserWizard, и это было сделано.

Спасибо за помощь, Даниэль, теперь я лучше понимаю, как ASP.NET хранит информацию.

...