Пользовательская проверка на стороне клиента ASP.Net

У меня есть настраиваемая функция проверки в JavaScript в пользовательском элементе управления на веб-сайте .Net 2.0, которая проверяет, не превышает ли уплаченная плата причитающуюся сумму.

Я поместил код валидатора в 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)

Решение

Попробуйте изменить имена аргументов на sender и args . И после того, как он заработает, переключите вызов на ScriptManager.RegisterClientScriptBlock, независимо от использования AJAX.

Когда вы используете .Net 2.0 и Ajax - вы должны использовать:

ScriptManager.RegisterClientScriptBlock

Он будет работать лучше в средах Ajax, чем в старой версии Page.ClientScript.

Хотя я все еще хотел бы получить ответ на вопрос, почему мой javascript не распознается, решение, которое я нашел тем временем (и должно было быть сделано в первую очередь), - это использовать Asp:CompareValidator вместо Asp:CustomValidator .

Также вы можете использовать:

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

Это автоматически разрешит идентификатор клиента для элемента без необходимости выяснять, что он вызван 'ctl00_footerContentHolder_Fees1_FeeDue' .