【问题标题】:Validate several controls with CustomValidator使用 CustomValidator 验证多个控件
【发布时间】:2013-07-15 14:00:09
【问题描述】:

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

                });
            }            
        }

【问题讨论】:

    标签: c# asp.net customvalidator


    【解决方案1】:

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

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

    关于验证细节,如果你需要检查3个控件的内容,在ChangePasswordServerValidate方法里面做,并相应地设置e.IsValidControlToValidate 属性与此处无关。

    【讨论】:

    • 在偶然发现一些论坛帖子后,我确实删除了 ControlToValidate。但是错误消息仍然没有显示。将显示更改为静态或动态也无济于事:((fwiw,所有其他验证器都设置了“无”)。
    • @ChristoferOlsson 请添加 ChangePasswordServerValidate 方法的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 2012-06-21
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多