36

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

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

Firefox 错误控制台的输出是"feeAmountCheck is not defined". 这是函数(这是直接取自 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>

关于为什么找不到该功能的任何想法?如何在无需将功能添加到我的母版页或消费页的情况下解决此问题?

4

4 回答 4

19

尝试将参数名称更改为senderand args。并且,在你让它工作之后,将调用切换到ScriptManager.RegisterClientScriptBlock,无论 AJAX 使用如何。

于 2008-08-04T17:02:56.237 回答
7

当您使用 .Net 2.0 和 Ajax - 您应该使用:

ScriptManager.RegisterClientScriptBlock

它在 Ajax 环境中会比旧的 Page.ClientScript 版本更好地工作

于 2008-08-04T16:51:03.420 回答
0

虽然我仍然想知道为什么我的 javascript 没有被识别,但我在此期间找到的解决方案(并且应该首先完成)是使用 anAsp:CompareValidator而不是Asp:CustomValidator.

于 2008-08-04T19:13:46.177 回答
0

你也可以使用:

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

这将自动解析元素的客户端 ID,而无需弄清楚它是否被调用'ctl00_footerContentHolder_Fees1_FeeDue'

于 2009-06-13T18:10:19.153 回答