当使用changepassword控件更改密码时,我想将新密码设置为空。为了支持这种情况,我从changepassword控件中删除了所需的字段验证器和比较验证器,它仍然会触发
ChangePassword1_ChangePasswordError(object sender, EventArgs e) event.
我正在使用自定义会员资格提供商,所以在第一次登录时,用户可能会将其密码设为空白。在登录控制中,我删除了密码字段所需的字段验证器,它可以很好地工作并验证用户。但是changepassord控件没有。
我试着打电话给
MembershipProvider.ChangePassword(ChangePassword1.UserName, ChangePassword1.CurrentPassword, ChangePassword1.NewPassword)
来自CCD_ 1事件。这是有效的,但不会进行所有验证。
在阅读反射器工具中的代码后,我发现ChangePassword Control调用
private void AttemptChangePassword()
{
if ((user != null) && user.ChangePassword(this.CurrentPasswordInternal,newPasswordInternal, false))
{...}
}
在上述方法中,当旧密码或新密码为null或为空时,user.ChangePassword()
返回false。因此,为了克服这个问题,您可以扩展MembershipUser
类并覆盖ChangePassword
方法,如下所示。
public override bool ChangePassword(string oldPassword, string newPassword)
{
return true;
}
在执行此操作时,我们可以在密码字段中传递空白密码。