Convalida lato client personalizzata ASP.Net
-
08-06-2019 - |
Domanda
Ho una funzione di convalida personalizzata in JavaScript in un controllo utente su un sito Web .Net 2.0 che verifica che la tariffa pagata non superi l'importo della tariffa dovuta.
Ho inserito il codice di convalida nel file ascx
file e ho anche provato a utilizzare Page.ClientScript.RegisterClientScriptBlock()
e in entrambi i casi la convalida si attiva, ma non riesce a trovare la funzione JavaScript.
L'output nella console degli errori di Firefox è "feeAmountCheck is not defined"
.Ecco la funzione (questa è stata presa direttamente da Firefox->visualizza sorgente)
<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>
Qualche idea sul motivo per cui la funzione non viene trovata?Come posso rimediare a questo senza dover aggiungere la funzione alla mia pagina master o alla pagina di consumo?
Soluzione
Prova a cambiare i nomi degli argomenti in sender
E args
.E, dopo averlo funzionato, trasferisci la chiamata a ScriptManager.RegisterClientScriptBlock
, indipendentemente dall'uso di AJAX.
Altri suggerimenti
Quando utilizzi .Net 2.0 e Ajax, dovresti utilizzare:
ScriptManager.RegisterClientScriptBlock
Funzionerà meglio negli ambienti Ajax rispetto alla vecchia versione Page.ClientScript
Inoltre potresti usare:
var amountDue = document.getElementById('<%=YourControlName.ClientID%>');
Ciò risolverà automaticamente l'ID client per l'elemento senza che tu debba capire come viene chiamato 'ctl00_footerContentHolder_Fees1_FeeDue'
.
Anche se vorrei ancora una risposta al motivo per cui il mio Javascript non veniva riconosciuto, la soluzione che ho trovato nel frattempo (e che avrei dovuto fare in primo luogo) è usare un Asp:CompareValidator
invece di un Asp:CustomValidator
.