【问题标题】:Reset password recovery state重置密码恢复状态
【发布时间】:2012-07-10 16:28:54
【问题描述】:

情况如下:

我的登录页面上使用了 ASP.NET PasswordRecovery (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.passwordrecovery.aspx) 控件。

当我点击“恢复链接”时,它会询问我的用户名,我输入它,点击“发送我的密码”按钮,它会通知我一封电子邮件已发送,然后我可以点击“返回”链接以返回登录控件并继续。

我的问题是:如果我再次点击“恢复链接”,控件会卡在最后一个状态,即成功状态或失败状态。如果卡在成功状态,用户将无法输入任何用户名。只会显示最后一条成功的消息,不能重复之前的过程。

我想将 PasswordRecovery 控件重置为其初始状态,这样用户就可以执行另一个密码恢复操作而无需刷新当前页面(按 F5)。

我玩了一下视图状态 + 销毁/重新创建控件,但没有任何成功。

以前有人遇到过这个问题吗?

提前致谢!

【问题讨论】:

  • 所以定义一个点击按钮的事件。
  • 谢谢,但这无济于事。我问的是如何重置控件状态,而不是如何处理按钮点击。

标签: c# asp.net asp.net-membership


【解决方案1】:

我确认没有干净的方法可以做到这一点(通过 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);
}

【讨论】:

    猜你喜欢
    • 2016-07-29
    • 2013-08-05
    • 2012-01-22
    • 1970-01-01
    • 2015-12-24
    • 2015-01-08
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多