0

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

                });
            }            
        }
4

1 回答 1

0

未设置错误消息,因为您将显示设置为None. 将其更改为StaticDynamic。从文档中:

  • - 验证消息永远不会内联显示。
  • 静态- 验证消息的空间在页面布局中分配。
  • 动态- 如果验证失败,验证消息的空间会动态添加到页面。

至于验证细节,如果您需要检查 3 个控件的内容,请在ChangePasswordServerValidate方法内部进行并e.IsValid相应地设置。该ControlToValidate属性与此处无关。

于 2013-07-15T14:31:36.500 回答