Validation personnalisée côté client ASP.Net

J'ai une fonction de validation personnalisée en JavaScript dans un contrôle utilisateur sur un site web .Net 2.0 qui vérifie que les frais payés ne dépassent pas le montant dû.

J'ai placé le code du validateur dans le fichier ascx , et j'ai aussi essayé d'utiliser Page.ClientScript.RegisterClientScriptBlock() et dans les deux cas la validation se déclenche, mais ne trouve pas la fonction 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>

Des idées sur la raison pour laquelle la fonction n'est pas trouvée? Comment puis-je y remédier sans devoir ajouter la fonction à ma page maître ou à ma page consommatrice?

0

4 Réponses

Bien que j'aimerais toujours avoir une réponse à la question de savoir pourquoi mon JavaScript n'était pas reconnu, la solution que j'ai trouvée entre-temps (et que j'aurais dû faire en premier lieu) consiste à utiliser un Asp: CompareValidator au lieu de un Asp: CustomValidator .

0
ajouté

Essayez de changer les noms d'arguments en sender et args . Et, après l'avoir fait fonctionner, basculez l'appel sur ScriptManager.RegisterClientScriptBlock , indépendamment de l'utilisation d'AJAX.

0
ajouté

Lorsque vous utilisez .Net 2.0 et Ajax - vous devez utiliser:

ScriptManager.RegisterClientScriptBlock

Cela fonctionnera mieux dans les environnements Ajax que dans l'ancienne version de Page.ClientScript

0
ajouté

Vous pouvez également utiliser:

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

Cela résoudra automatiquement l'identifiant du client pour l'élément sans que vous ayez à comprendre qu'il s'appelle 'ctl00_footerContentHolder_Fees1_FeeDue' .

0
ajouté