我编写了一个简单的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>
ResetPassword.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>
ResetPassword Codebehind:
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";
}
}
}
}
每当我点击按钮更改密码时,默认页面都会调用回发,它会删除输入的文本来更改密码,因此当调用click函数时,字符串会以“”形式出现,它会引发错误。
答案 0 :(得分:1)
我在测试项目中实现了上面的内容,并且它正常工作。 lbUpdatePass_Click事件在文本框的每个文本属性中具有正确的值。您是否在父或子Page_Load事件中有代码操作那些文本字段?您没有在上面显示的任何其他代码?