2012-07-10 12 views
8

はここの状況です。リセットパスワードの回復状態

「リカバリリンク」をクリックすると、自分のユーザー名を入力して入力し、「パスワードを送信」ボタンをクリックすると、メールが送信されたことが通知され、 "戻る"リンクをクリックしてログインコントロールに戻り、続行します。

私の問題は次のとおりです。「リカバリリンク」をもう一度クリックすると、コントロールは正常状態または失敗状態である最後の状態に固執します。成功した状態で立ち往生すると、ユーザーはユーザー名を入力できなくなります。前回と同じ手順を繰り返すことなく、最後に成功したメッセージのみが表示されます。

私はPasswordRecoveryコントロールを初期状態にリセットしたいので、ユーザーは現在のページをリフレッシュせずに別のパスワード回復操作を実行できます(F5キーを押す)。

私はビューステートで少し演奏しました+コントロールを破壊/再作成しましたが、成功しませんでした。

誰もこの問題を以前に持っていましたか?

ありがとうございます!

+0

の後ろだから、ボタンをクリックするイベントを定義します。 –

+0

ありがとうございますが、それは助けにはなりません。私はどのようにボタンのクリックを処理するかではなく、コントロールの状態をリセットする方法を求めています。 –

答えて

6

これを行うには、(ILSpyを使用して)これを行うためのクリーンな方法はないことを確認しました(下の例を少し汚れた方法で確認してください)。基本的にはリフレクションを使用して内部プロパティであるプロパティを取得し、次にPasswordResetコントロールの現在のビューをUsername(0)、Question(1)、またはSuccess(2)の3つの状態のいずれかに設定します。

デザイナー

<form id="form1" runat="server"> 
<div> 
    <asp:PasswordRecovery ID="pwr" runat="server"></asp:PasswordRecovery> 
</div> 
<span>Set Recover State: </span> 
<asp:RadioButtonList ID="rblChangeState" runat="server" AutoPostBack="True" 
    onselectedindexchanged="rblChangeState_SelectedIndexChanged"> 
    <asp:ListItem Text="Username" Value="0" /> 
    <asp:ListItem Text="Question" Value="1" /> 
    <asp:ListItem Text="Success" Value="2" /> 
</asp:RadioButtonList> 
</form> 

コード

protected void rblChangeState_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    Type t = pwr.GetType(); 
    PropertyInfo viewSetter = t.GetProperty("CurrentView", BindingFlags.Default | BindingFlags.NonPublic | BindingFlags.Instance); 
    viewSetter.SetValue(pwr, Convert.ToInt32(rblChangeState.SelectedValue), null); 
} 
+0

あなたの努力のためにピーターに感謝、それは完璧に動作します! –

+0

素晴らしい、ありがとう。 – Brissles

関連する問題