Validation côté client personnalisée 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 des frais dus.

J'ai placé le code du validateur dans le fichier ascx, et j'ai également essayé d'utiliser Page.ClientScript.RegisterClientScriptBlock() et dans les deux cas la validation se déclenche, mais je ne trouve pas la fonction JavaScript .

La sortie dans la console d'erreur de Firefox est 'feeAmountCheck is not defined'. Voici la fonction (elle a été prise directement à partir de firefox->voir la 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>

Avez-vous une idée de la raison pour laquelle la fonction n'est pas trouvée ? Comment puis-je remédier à cela sans avoir à ajouter la fonction à ma page maître ou à ma page consommatrice ?

请先 登录 后评论

4 réponses

Brendan

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

ScriptManager.RegisterClientScriptBlock

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

请先 登录 后评论
Greg Hurlman

Essayez de changer les noms des arguments en sender et args. Et, une fois que cela fonctionne, basculez l'appel sur ScriptManager.RegisterClientScriptBlock, quelle que soit l'utilisation d'AJAX.

请先 登录 后评论
Rob Allen

Bien que j'aimerais toujours 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 à la place d'un Asp:CustomValidator.

请先 登录 后评论
kpax

Vous pouvez également utiliser :

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

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

请先 登录 后评论