使用CustomValidator验证多个控件

时间:2013-07-15 14:00:10

标签: c# asp.net customvalidator

我正在构建一项功能,供用户更改密码。所以这意味着我有三个需要验证的文本字段(当前==实际当前,并且是新的==重复)。所以我第一次尝试构建一个自定义验证器,我不知道该怎么做。从我看到的另一个例子来看,验证器只绑定到一个输入字段,这意味着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 =>
                {

                });
            }            
        }

1 个答案:

答案 0 :(得分:0)

由于您要将显示设置为None,因此未设置错误消息。将其更改为StaticDynamic。来自documentation

  • - 验证邮件永远不会内联显示。
  • 静态 - 验证邮件的空间在页面中分配 布局。
  • 动态 - 动态添加验证邮件的空间 验证失败的页面。

关于验证详细信息,如果您需要检查3个控件的内容,请在ChangePasswordServerValidate方法中执行此操作并相应地设置e.IsValidControlToValidate属性与此无关。