JavaScript客户端函数不触发ASP自定义验证器

本文关键字:ASP 自定义 验证 客户端 函数 JavaScript | 更新日期: 2023-09-27 18:15:18

我有以下ASP CustomValidator:

<asp:CustomValidator ID="CustomValidator2" runat="server"
    EnableClientScript="true" OnServerValidate="ins_server"  ClientValidationFunction ="ins_client" 
    ErrorMessage="CustomValidator"> * Insurance dates not valid without supporting attached document</asp:CustomValidator>

以下c#服务器端函数:

protected void ins_server(object source, ServerValidateEventArgs args)
{
    //new user
    if (PageMode == PageModes.NewVessel)
    {
        if (fuAttachment.HasFile && datetimepickerinsend != null && datetimepickerinsstart != null)
        {
            args.IsValid = true;
        }              
        else
        {
            args.IsValid = false;
        }
    }    
    //existing user
    if (PageMode == PageModes.EditVessel)
    {
        args.IsValid = true;
    }
}

以及以下客户端JavaScript函数存储在名为customfunctions.js的文件中:

//declerations
var insurancestart;
var insuranceend;
var filesattached;
function ins_client(sender, e) {
    if (pagemode == 'EditVessel') {
        e.IsValid = true;
    }
    if (pagemode == 'NewVessel') {
        if (insurancestart !== '' && insuranceend !== '' && filesattached > 0) {
            e.IsValid = true;
        }
        else {
            e.IsValid = false;
        }
    }
}

我还在控件所在的ASPX页面中定义了以下全局变量:

 <script type="text/javascript">
     var pagemode;
     $(document).ready(function () {
         // removed var to give global scope
         pagemode = '<%=this.PageMode.ToString()%>';                         
     });
</script>

我的问题是我在服务器端函数上放置了一个断点,每当我单击提交按钮时,服务器端代码就会被调用并刷新页面。如果我在chrome中调试,我可以看到我所有的JS变量都有预期的值,似乎出于某种原因,客户端JS函数没有触发,而是掉到服务器端函数。

JavaScript客户端函数不触发ASP自定义验证器

这里发生的事情正如@Justin-iurman指出的,当函数返回true时,服务器端函数也将在客户端之后被调用。在我的情况下,虽然当我测试false结果时,我仍然直接进入服务器端功能。

结果是按下F12在chrome和检查控制台,我有一个未定义的错误在我的JS代码。将有问题的函数移出专门用于此页面的函数并移到全局上下文中,为我整理了问题。