【发布时间】:2011-03-11 15:30:02
【问题描述】:
我编写了一个简单的 jQuery 对话框,如果登录的用户在过去 90 天内没有重置密码,它将出现在 asp 面板中。这很好用,但是当用户输入密码并按下提交以将新密码插入数据库时,父页面会在用户控件上触发 click 事件之前回发。
以下是它的设置方式:
default.aspx
<asp:Panel ID="pnlTest" runat="server" Visible="false">
<div id="dialog" title="Password must be reset">
<cms:ResetPassword runat="server" ID="reset" />
</div>
</asp:Panel>
重置密码.ascx:
<div style="overflow:auto; white-space:nowrap;">
<table class="tableChangePassword">
<tr>
<td>Current Password</td>
<td colspan="2"><asp:TextBox runat="server" ID="txtCurrentPass" TextMode="Password" /></td>
</tr>
<tr>
<td>New Password</td>
<td><asp:TextBox runat="server" ID="txtNewPass1" TextMode="Password" CssClass="newPass1" /></td>
</tr>
<tr>
<td>Verify New Password</td>
<td><asp:TextBox runat="server" ID="txtNewPass2" TextMode="Password" CssClass="newPass2" /></td>
</tr>
<tr>
<td colspan="2">
</td>
</tr>
<tr>
<td colspan="3"><asp:LinkButton runat="server" ID="lbUpdatePass" Text="Submit" onclick="lbUpdatePass_Click" /></td>
</tr>
</table>
<asp:Label runat="server" ID="lblMSG" />
</div>
重置密码隐藏代码:
public partial class ResetPassword : UserControl
{
protected void lbUpdatePass_Click(object sender, EventArgs e)
{
string newPass = txtNewPass1.Text;
string confirmNewPass = txtNewPass2.Text;
if (newPass == confirmNewPass)
{
MembershipUser user = AuthenticatedUser.GetMembershipProvider().GetUser(AuthenticatedUser.LoginUserID, false);
if (user != null)
{
string resetPsw = user.ResetPassword();
user.ChangePassword(resetPsw, newPass);
lblMSG.Text = "Password Changed Successfully";
}
}
}
}
每当我单击按钮更改密码时,默认页面都会调用回发,它会将输入更改密码的文本清空,因此当单击函数被调用时,字符串会以“”的形式出现,并且它会引发错误。
【问题讨论】:
标签: c# .net asp.net asp.net-membership postback