c# - JavaScript 客户端函数未针对 ASP 自定义验证器触发

标签 c# javascript asp.net .net

我有以下 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 函数没有触发,而是落入服务器端函数。

最佳答案

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

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

关于c# - JavaScript 客户端函数未针对 ASP 自定义验证器触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25015555/

相关文章:

c# - CSS 不会通过捆绑呈现,如果直接写在页面上可以正常工作

javascript - jquery:预填充自动完成字段

asp.net - IIS 7.0 无法正确处理静态文件

javascript - 通过验证表单中的按钮清除标签

Javascript:从字符串(包括查询字符串)中提取 URL 并返回数组

javascript - asp中继器模板条件验证javascript

c# - X509证书和XmlDsig

c# - 是否可以使用 C# 隐藏特定的桌面图标?

c# - SQL依赖于 MariaDB/MySQL 数据库

javascript - Jquery load() 使页面刷新