CustomFieldValidator ClientValidationFunction 未触发且没有错误

CustomFieldValidator ClientValidationFunction not firing and no error

我添加了 CustomValidator ClientValidationFunction 来验证我的 Web 应用程序中的文本字段,但是,此验证函数根本没有触发。 这是我的验证函数:

function isValidYear(sender,args)
        {
            alert('Me here');
            var year = document.getElementById('MainContent_frmArticle_Source_txtYear').value;
            var currentdate = new Date();
            var regex = new RegExp("^\d{4}$");
            if (year > 1 && year <= currentdate.getFullYear() && regex.test(year)) {
                alert('IsValid');
                args.IsValid = true;
            }
            else
            {
                alert('Is Not Valid');
                args.IsValid = false;
            }

// 我添加这些警报只是为了测试函数是否被触发,但它们从未显示。

这是我的自定义验证器代码:

<asp:TextBox ID="txtYear" runat="server" widtth="20%"></asp:TextBox>
<asp:CustomValidator runat="server" ID="CustomValidateYear" ClientValidationFunction="isValidYear" ControlToValidate="txtYear" ErrorMessage="Please enter a valid year" Display="Static" ForeColor="Red" ></asp:CustomValidator>

更多信息:
我正在使用 Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.6.114.0 并且在添加验证器后的第一个 运行 我收到 "unobtrusive validation" 的错误所以我按照网站上的步骤操作(我不能记住它是哪一个)将包安装到我的项目中:

<package id="AspNet.ScriptManager.jQuery" version="2.1.4" targetFramework="net45" />
  <package id="jQuery" version="2.1.4" targetFramework="net45" />
  <package id="Microsoft.AspNet.ScriptManager.MSAjax" version="5.0.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.ScriptManager.WebForms" version="5.0.0" targetFramework="net45" />

请注意,我不想将不引人注目的验证设置为 None,正如 SO 上的大多数帖子所提到的那样。

您发布的代码有效,只有我注意到您在 js 函数 isValidYear 中错过了右括号 },并检查您是否将其放在 <script type="text/javascript"></script> 中,这样它看起来像

<script type="text/javascript">

    function isValidYear(sender, args) {
        alert('Me here');
        var year = document.getElementById('MainContent_frmArticle_Source_txtYear').value;
        var currentdate = new Date();
        var regex = new RegExp("^\d{4}$");
        if (year > 1 && year <= currentdate.getFullYear() && regex.test(year)) {
            alert('IsValid');
            args.IsValid = true;
        }
        else {
            alert('Is Not Valid');
            args.IsValid = false;
        }
    }
</script>

另请注意,CustomValidator 不会在空文本上触发,您需要添加 RequiredFieldValidator

顺便说一句,你可以简单地替换你的 document.getElementById('MainContent_frmArticle_Source_txtYear').value

args.Value