2008-08-04 9 views
24

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û.ASP.Net Custom Client-Side Validation

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 ne trouve pas la fonction JavaScript.

La sortie dans la console d'erreur de Firefox est "feeAmountCheck n'est pas défini". Voici la fonction (ce qui a été prise directement à partir 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> 

Toutes les idées pour lesquelles la fonction n'est pas trouvé? Comment puis-je y remédier sans devoir ajouter la fonction à ma page maître ou à ma page consommatrice?

Répondre

13

Essayez de changer les noms d'argument à sender et args. Et, après que vous l'ayez fonctionné, passez l'appel à ScriptManager.RegisterClientScriptBlock, indépendamment de l'utilisation d'AJAX.

7

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

ScriptManager.RegisterClientScriptBlock 

Il fonctionnera mieux dans des environnements Ajax alors l'ancienne version Page.ClientScript

0

Alors que je voudrais toujours une réponse à la raison pour laquelle mon javascript n'a pas été reconnu, la solution que j'ai trouvée entre-temps (et aurait dû faire en premier lieu) est d'utiliser un Asp:CompareValidator au lieu d'un Asp:CustomValidator.

0

vous pouvez également utiliser:

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

qui résoudra automatiquement l'identifiant client pour l'élément sans que vous ayez à comprendre qu'il est appelé 'ctl00_footerContentHolder_Fees1_FeeDue'.