我正在构建一项功能,供用户更改密码。所以这意味着我有三个需要验证的文本字段(当前==实际当前,并且是新的==重复)。所以我第一次尝试构建一个自定义验证器,我不知道该怎么做。从我看到的另一个例子来看,验证器只绑定到一个输入字段,这意味着ControlToValidate属性是相当自我解释的。但是现在呢?
我正在尝试这样做:
var passwordValidator = new CustomValidator()
{
Display = ValidatorDisplay.None,
ValidationGroup = "PasswordValidationGroup"
};
passwordValidator.ServerValidate += ChangePasswordServerValidate;
ValidationPlaceHolder.Controls.Add(passwordValidator);
但我没有得到我追求的结果。验证器确实在预期时执行,并且调试显示它遵循if / else-structure按预期方式,但错误消息永远不会被设置。那么如何设置它以验证三个控件?是否与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 =>
{
});
}
}
答案 0 :(得分:0)
由于您要将显示设置为None
,因此未设置错误消息。将其更改为Static
或Dynamic
。来自documentation:
关于验证详细信息,如果您需要检查3个控件的内容,请在ChangePasswordServerValidate
方法中执行此操作并相应地设置e.IsValid
。 ControlToValidate
属性与此无关。