2008-08-04 42 views
24

Ich habe eine benutzerdefinierte Validierungsfunktion in JavaScript in einem Benutzersteuerelement auf einer .Net 2.0-Website, die überprüft, um zu sehen, dass die gezahlte Gebühr den fälligen Betrag nicht übersteigt.ASP.Net Benutzerdefinierte clientseitige Validierung

Ich habe den Validator-Code in der Ascx-Datei platziert, und ich habe auch versucht, Page.ClientScript.RegisterClientScriptBlock() zu verwenden und in beiden Fällen wird die Validierung ausgelöst, aber kann die JavaScript-Funktion nicht finden.

Die Ausgabe in der Fehlerkonsole von Firefox ist "feeAmountCheck ist nicht definiert". Hier wird die Funktion (dies wurde direkt von Firefox-> Quelltext anzeigen genommen)

<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> 

Irgendwelche Ideen, warum die Funktion nicht gefunden wird? Wie kann ich das beheben, ohne die Funktion meiner Masterseite oder meiner Verbrauchsseite hinzufügen zu müssen?

Antwort

13

Versuchen Sie, die Argumentnamen zu ändern, um sender und args. Und, nachdem Sie es funktioniert haben, wechseln Sie den Anruf auf ScriptManager.RegisterClientScriptBlock, unabhängig von AJAX verwenden.

7

Wenn Sie mit .Net 2.0 und Ajax - sollten Sie verwenden:

ScriptManager.RegisterClientScriptBlock 

Es ist besser in Ajax-Umgebungen funktionieren dann die alte Version Page.ClientScript

0

Während ich immer noch eine Antwort darauf, warum mein Javascript nicht erkannt wurde, würde die Lösung, die ich in der Zwischenzeit gefunden habe (und sollte in erster Linie getan haben), eine Asp:CompareValidator anstelle von Asp:CustomValidator verwenden.

0

Auch könnten Sie verwenden:

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

Das wird automatisch die Client-ID für das Element lösen, ohne dass Sie, um herauszufinden, mit, dass es 'ctl00_footerContentHolder_Fees1_FeeDue' genannt wird.

Verwandte Themen