用户控件上的CustomValidator无法正常工作

时间:2010-11-05 21:47:19

标签: javascript asp.net

我已将ClientValidationFunction的CustomValidator设置为:

    <asp:CustomValidator ID="CustomValidator1" runat="server" Display="Dynamic" EnableClientScript="true" ClientValidationFunction="checkClients" ErrorMessage="You must select at least one client or staff" SetFocusOnError="true"></asp:CustomValidator>

我将我的Javascript函数设置为:

    <script type="text/javascript">
    function checkClients(sender, args) {
        if ($find("<%= selSelectedClientFamily.ClientID %>").get_items().get_count() > 0) {
            args.IsValid = true;
        } else {
            args.IsValid = false;
        }
    }

</script>

我将这一切都放在用户控件中,我将其放入另一页的表单中。

测试时,验证正在激活,实际上JS函数已执行并且工作正常。但是 - 无论IsValid是真还是假,都会提交表单。就像它正在执行但没有注意结果。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

页面是否有回传?

如果是,您是否还可以提供ValidateSelectedClients服务器端验证器的内容?

或许最好检查它是否在服务器端正确验证。

除此之外,如果您在网络表单中多次使用您的用户控件,那么就是这样。因为如果在标记上设置验证JS函数并且如果在同一页面上插入多个控件,则可能会出现问题:因为该函数将具有相同的名称,所以每个控件将一次又一次地重写此函数。我建议你在这种情况下在服务器端生成客户端控件。

要检查客户端验证器:我会在客户端函数的开头添加警报,如:

alert( $find("<%= selSelectedClientFamily.ClientID %>").length ) 

以及

alert( $find("<%= selSelectedClientFamily.ClientID %>").get_items().length )  

只是为了看看我是否真的得到了所需的DOM对象,以及我是否真正点击了那部分代码。

我还会在代码末尾添加最后一个警告

alert('The end of client validator function is reached')

答案 1 :(得分:0)

我能够解决这个问题。事实证明,提交时发生了一个javascript错误,导致问题的第三方控件。