【问题标题】:WebForms - Custom Validator No Longer WorkingWebForms - 自定义验证器不再工作
【发布时间】:2016-08-16 09:45:25
【问题描述】:

在我的 WebForms 应用程序中,我有一个 CustomValidator 控件。此控件执行我创建的 JavaScript 函数。如果此函数返回 false,则表单将不会提交。此验证器与标准 RequiredFieldValidatorRegularExpressionValitors 一起使用。

这在以前工作得很好,但是现在,即使 JavaScript 函数返回 false,页面仍然会提交。出于某种原因,CustomValidator 被忽略了。只要RequiredFieldValidatorRegularExpressionValidator 控件通过,页面就会提交,即使JavaScript 函数在提交时显示错误。

我已经调试了 JavaScript 函数,它肯定会返回 false。我的CustomValidator 没有使用任何服务器端代码。

JavaScript:

function validateForm() {
    if (document.getElementById("DDApplicationID").selectedIndex > 0
        && document.getElementById("div_applicationType").style.display != "none") {
        return true;
    }
    else if (document.getElementById("DDApplicationID").selectedIndex > 0) {
        var valid = true;

        ((validateTrainStation() == false) ? valid = false : valid);
        ((validateSupportType() == false) ? valid = false : valid);
        ((validateHomeStatus() == false) ? valid = false : valid);
        ((validateOtherNationality() == false) ? valid = false : valid);
        ((validateOtherHomeStatus() == false) ? valid = false : valid);
        ((validateSortCode() == false) ? valid = false : valid);
        ((validateCareLeaverMessage() == false) ? valid = false : valid);

        return valid; //returns false in JavaScript debugger on Chrome
    }
}

Web 表单 .aspx

<form id="Application" runat="server">
    <asp:CustomValidator ID="CustomValidator1" runat="server" ValidationGroup="AllValidation" ClientValidationFunction="validateForm"></asp:CustomValidator>
    <asp:Button ID="SaveLSFApplication" runat="server" Text="Submit Application" OnClick="saveApplication" ValidationGroup="AllValidation" />
</form>

WebForms .aspx.vb

Sub saveApplication(ByVal sender As Object, ByVal e As EventArgs)
    If Page.IsValid Then
        '--- do logic
    End If
End Sub

我知道仅客户端验证还不够好,但它适用于仅在满足特定条件时非可选的表单部分,即当用户在下拉框中选择“其他”并且我们希望他们在文本框中输入原因。

【问题讨论】:

    标签: javascript asp.net vb.net webforms


    【解决方案1】:

    我自己解决了这个问题。即使 JavaScript 函数返回 false,这在 CustomValidator 控件的上下文中也没有任何意义。为了防止表单提交,CustomValidator 评估属性IsValid。如果IsValidfalse,则表单不会提交。

    这是反映这一变化的修改后的 JavaScript 函数:

    function validateForm(sender, args) { //added two function parameters
        if (document.getElementById("DDApplicationID").selectedIndex > 0
            && document.getElementById("div_applicationType").style.display != "none") {
            return true;
        }
        else if (document.getElementById("DDApplicationID").selectedIndex > 0) {
            var valid = true;
    
            ((validateTrainStation() == false) ? valid = false : valid);
            ((validateSupportType() == false) ? valid = false : valid);
            ((validateHomeStatus() == false) ? valid = false : valid);
            ((validateOtherNationality() == false) ? valid = false : valid);
            ((validateOtherHomeStatus() == false) ? valid = false : valid);
            ((validateSortCode() == false) ? valid = false : valid);
            ((validateCareLeaverMessage() == false) ? valid = false : valid);
    
            args.IsValid = valid; //no longer returning valid
        }
    }
    

    如您所见,我添加了两个函数参数,senderargs。然后,我现在将args 参数的属性IsValid 设置为valid 的值,而不是简单地返回valid。所以,如果validfalse,那么IsValid 是假的。然后评估此IsValid,然后阻止表单继续提交。

    【讨论】:

      猜你喜欢
      • 2011-09-04
      • 2012-04-20
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 2017-01-26
      相关资源
      最近更新 更多