javascript - WebForms - 自定义验证器不再工作

标签 javascript asp.net vb.net webforms

在我的 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
    }
}

网络表单.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 函数返回 false,但这在 CustomValidator 控件的上下文中没有任何意义。为了阻止表单提交,CustomValidator 会评估属性 IsValid。如果 IsValidfalse,则表单将不会提交。

以下是修改后的 JavaScript 函数以反射(reflect)此更改:

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 为 false。然后评估此 IsValid,从而阻止表单继续提交。

关于javascript - WebForms - 自定义验证器不再工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38971586/

相关文章:

asp.net - Visual Studio 2012 中的远程调试

vb.net - TCP 客户端未收到所有消息

c# - 在 C#/VB 中使用 Windows API 结构的 Ansi 和 Unicode 版本的简单方法

javascript - 使用 node-html-pdf 模块下载生成的 PDF

javascript - 希腊语和文本转换 :uppercase

c# - 验证/创建仅数字文本框的最佳方式?

c# - Telerik Rad Combo Box 以及如何使其失去焦点

javascript - 回调函数的执行流程如何?

javascript - 使用 jspdf 时转换/规范化特殊字符

javascript - __doPostBack 在 safari 或 firefox 中不起作用,在 IE 中起作用