Validation personnalisée côté client ASP.Net
-
08-06-2019 - |
Question
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 ascx
fichier, 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 is not defined"
.Voici la fonction (elle a été extraite directement de 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>
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 de consommation ?
La solution
Essayez de changer les noms des arguments en sender
et args
.Et, une fois que cela fonctionne, basculez l'appel vers ScriptManager.RegisterClientScriptBlock
, quelle que soit l'utilisation d'AJAX.
Autres conseils
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
Vous pouvez également utiliser :
var amountDue = document.getElementById('<%=YourControlName.ClientID%>');
Cela résoudra automatiquement l'identifiant client de l'élément sans que vous ayez à comprendre qu'il s'appelle 'ctl00_footerContentHolder_Fees1_FeeDue'
.
Même si j'aimerais toujours savoir pourquoi mon javascript n'a pas été reconnu, la solution que j'ai trouvée entre-temps (et j'aurais dû la faire en premier lieu) est d'utiliser un Asp:CompareValidator
au lieu d'un Asp:CustomValidator
.