2012-07-10 44 views
8

這裏的情況:重置密碼恢復狀態

我有我的登錄頁面上使用ASP.NET PasswordRecovery(http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.passwordrecovery.aspx)控制。

當我點擊「恢復鏈接」時,它會詢問我的用戶名,我輸入它,點擊「發送我的密碼」按鈕,它會通知我一封電子郵件已發送,然後點擊「返回」鏈接返回登錄控制並繼續。

我的問題是:如果我再次單擊「恢復鏈接」,控件會停留在最後一個狀態,即成功狀態或失敗狀態。如果卡在成功狀態,用戶將無法輸入任何用戶名。只有最後一條成功的消息纔會顯示,而不能重複與之前相同的過程。

我想重置密碼恢復控制到它的初始狀態,所以用戶可以做另一個密碼恢復操作,而不必刷新當前頁面(按F5)。

我玩了一下viewstate + destroy /重新創建控件,但沒有任何成功。

以前有人有過這個問題嗎?

在此先感謝!

+0

所以定義事件點擊按鈕。 – 2012-07-10 19:00:13

+0

謝謝,但這沒有幫助。我在問如何重置控制狀態,而不是如何處理按鈕點擊。 – 2012-07-10 19:20:26

回答

6

我驗證了沒有乾淨的方法來做到這一點(通過ILSpy),請參閱下面的例子,以稍微骯髒的方式。基本上我們使用反射來獲得CurrentView屬性,這是一個內部屬性,然後我們將PasswordReset控件的當前視圖設置爲以下三種狀態之一:用戶名(0),問題(1)或成功(2)。

設計師

<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

感謝彼得的努力,它完美的作品! – 2012-07-12 17:28:12

+0

輝煌,謝謝。 – Brissles 2013-11-21 16:12:20