ASP.Net自定义客​​户端验证

我在.Net 2.0网站上的用户控件中的JavaScript中有一个自定义验证函数,该函数用于检查支付的费用是否超过应付费用。

我已经将验证器代码放置在 ascx 文件中,并且我也尝试过使用 Page.ClientScript.RegisterClientScriptBlock(),并且在两种情况下验证都会触发,但无法找到JavaScript功能。

The output in Firefox's error console is "feeAmountCheck is not defined". Here is the function (this was taken directly from firefox->view source)

<script type="text/javascript">
    function feeAmountCheck(source, arguments)
    {
        var amountDue = document.getElementById('ctl00_footerContentHolder_Fees1_FeeDue');
        var amountPaid = document.getElementById('ctl00_footerContentHolder_Fees1_FeePaid');

        if (amountDue.value > 0 && amountDue >= amountPaid)
        {
            arguments.IsValid = true;
        }
        else
        {
            arguments.IsValid = false;
        }

        return arguments;
    }
</script>

任何想法为什么函数没有被发现?我可以如何补救这一点,而不必将功能添加到我的母版页或使用页面?

0
额外 编辑
意见: 2

4 答案

虽然我仍然想回答为什么我的javascript没有被识别,但我在此期间找到的解决方案(应该首先完成)是使用 Asp <> CompareValidator ,而不是一个 Asp:CustomValidator

0
额外

尝试将参数名称更改为 senderargs 。而且,在你使用它之后,不管AJAX如何使用,都可以将调用切换到 ScriptManager.RegisterClientScriptBlock

0
额外

当你使用.Net 2.0和Ajax时,你应该使用:

ScriptManager.RegisterClientScriptBlock

它将在Ajax环境中更好地工作,然后是旧的Page.ClientScript版本

0
额外

你也可以使用:

var amountDue = document.getElementById('<%=YourControlName.ClientID%>');

这将自动解析元素的客户端ID,而不必知道它被称为'ctl00_footerContentHolder_Fees1_FeeDue'

0
额外