哪些控件触发了 Page.IsValid = false?

Posted

技术标签:

【中文标题】哪些控件触发了 Page.IsValid = false?【英文标题】:Which controls triggered the Page.IsValid = false? 【发布时间】:2011-04-24 21:44:19 【问题描述】:

两件事:

    是否可以通过 Jquery 设置 Page.IsValid (Is_Valid) 属性,这样我就不必使用 aspx 验证器了?我的理解是 IsValid 属性是只读的?

    当验证器进入时,是否可以通过 Jquery(当然)找出哪些控件导致验证失败?一个例子是带有大量文本框的表单:用户单击按钮,我在验证摘要中得到结果。一切都很好,花花公子。但我也想通过将相应的文本框背景更改为红色来让用户知道他们是哪些控件。

现在的破解方法是我调用我自己的 JS 函数来检查所有文本框以进行验证(再次),然后将 css 更改为无效的以显示红色。但我会认为肯定有一种方法可以识别哪些控件未通过验证?

有什么见解吗?

【问题讨论】:

【参考方案1】:

(A) 是不可能的。 Page.IsValid 由服务器端验证设置,客户端不应该乱用它。无论如何,如果客户端验证失败,客户端验证不会回发,因此在这种情况下甚至不会调用 Page.Validate()

AJAX Control Toolkit 通过重新绑定验证函数实现(B)。您可以尝试以下方法:

[免责声明:我还不太熟悉 jQuery,所以我将使用纯 JS。随意翻译成适当的 jQuery 成语。]

for (var i = 0; i < window.Page_Validators.length; ++i) 
    var validator = window.Page_Validators[i];
    validator.__old_evaluationfunction = validator.evaluationfunction;
    validator.evaluationfunction = function(value) 
        var element = validator.controltovalidate;
        if (!validator.__old_evaluationfunction(value)) 
            // Validation failed - turn `element` red, scream at the user, etc.
            return false;
         else 
            // Validation succeeded - restore `element` to its normal state.
            return true;
        
    ;

【讨论】:

由于某种原因,验证没有使用正则表达式验证器触发。有什么想法吗?? 它已调试,但我的结果有问题。为精彩的答案喝彩【参考方案2】:

所有验证控件都肯定会进行服务器验证。从客户端覆盖 isvalid=false 只能防止回发发生。在服务器端和客户端,您可以通过验证器的集合进行枚举,并且每个 ctrl 都有 IsValid 属性。

【讨论】:

以上是关于哪些控件触发了 Page.IsValid = false?的主要内容,如果未能解决你的问题,请参考以下文章

即使输入无效,asp 页面上的自定义验证器也会返回 Page.IsValid (ture)

你如何确定哪个验证器失败了?

在自定义控件中,有CheckBox控件,当触发OnCheckedChanged事件时

C# datagridview 单元格内值改变时触发了哪些事件?(winform)

PB数据窗口(dw控件)中焦点在同一行不同字段修改数据后切换到同一行的不同字段后会触发哪些事件?<->

QTreeWidget控件中 itemchanged信号触发后,怎么获取item修改前的值