我正在为用户构建一个功能来更改他们的密码。所以这意味着我有三个需要验证的文本字段(当前 == 实际当前,并且是新的 == 重复)。所以我第一次尝试构建一个自定义验证器,但不知道该怎么做。从我看到的另一个示例中,验证器仅与一个输入字段相关联,这意味着 ControlToValidate 属性是不言自明的。但是现在呢?
我正在尝试这样做:
var passwordValidator = new CustomValidator()
{
Display = ValidatorDisplay.None,
ValidationGroup = "PasswordValidationGroup"
};
passwordValidator.ServerValidate += ChangePasswordServerValidate;
ValidationPlaceHolder.Controls.Add(passwordValidator);
但我没有得到我想要的结果。验证器确实按预期执行,调试显示它按照预期遵循 if/else 结构,但错误消息永远不会设置。那么如何设置它来验证三个控件呢?它是否与 ValidationGroup 有关?我只是将该属性设置为类似于在其他自定义验证器中的设置。
private void ChangePasswordServerValidate(object sender, ServerValidateEventArgs e)
{
var validator = sender as IValidator;
var user = SessionManager.Get<OrderFacade>(SessionKeys.OrderFacade).User;
if (CurrentPasswordTextBox.Text == "" || NewPasswordTextBox.Text == "" || RepeatPasswordTextBox.Text == "")
{
validator.ErrorMessage = SiteTextResources.CreateAccount_YourEmailAddressEmpty;
e.IsValid = false;
}
else if (!NewPasswordTextBox.Text.Equals(RepeatPasswordTextBox.Text))
{
validator.ErrorMessage = SiteTextResources.CreateAccount_YourEmailAddressEmpty;
e.IsValid = false;
}
else
{
ResolveClient<IUserClient>().TryPassword(user.UserName, CurrentPasswordTextBox.Text, passwordSuccessfullyChanged =>
{
e.IsValid = passwordSuccessfullyChanged;
validator.ErrorMessage = String.Empty;
}, error =>
{
});
}
}