2

ログイン/ユーザー作成ページでフォーム認証を使用する CreateUserWizard コントロールがあります。バリデーターを追加できるように、CreateUserWizardStep1 をカスタマイズしました。

コントロールを使用してユーザーを正常に作成すると、「Complete Your account has been successfully created.」と表示されます。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 は、TextBox などのコントロールの変更された値を格納する責任を負いません。これらのコントロールは、IPostBackDataHandler インターフェイスを実装します。LoadPostBackData イベントはページ ライフサイクルで発生し、コントロールの VALUES がフォーム HTTP POST ヘッダーから読み込まれます...クライアントによって再送信されます...

では、HTTP POST ヘッダーを破棄してコントロール値をクリアするにはどうすればよいでしょうか?

新しいリクエストの結果、新しい HTTP POST ヘッダーが生成されます...ボタン クリック イベント ハンドラーでこれを行うだけです。

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

これには、ウィザードのステップ 1 に進むという追加の利点があるため、実行する必要もありません... wiz.MoveTo(wiz.WizardSteps[0])。

Konrad の功績 - ASP.Net Wizard - Web コントロールのコンテンツをクリアする方法

于 2010-06-23T13:16:19.617 に答える
1

これを投稿するのはばかげていると思います...しかし、CreateUserWizardコントロールでviewstateをオフにしただけで、それができました。

ダニエルの助けに感謝します。ASP.NETが情報を格納する方法について理解が深まりました。

于 2010-06-23T14:31:32.370 に答える