Ich habe diesen Code, der ausgelöst wird, wenn ein Formular gesendet wird:
%Vor%Was es tut: es ruft den Google Geocoding-Dienst auf, um eine Adresse in den Längen- / Breitengrad zu übersetzen, der in ein verstecktes Feld des Formulars gesetzt wird. Wenn ein Ergebnis vorliegt, wird das Formular gesendet.
Das Problem besteht darin, dass bei fehlgeschlagener Validierung (z. B. wenn ein erforderliches Feld nicht festgelegt wurde) der Aufruf der Geocodierung dennoch erfolgt. Außerdem, wenn ich ein zweites Mal auf die Schaltfläche "Senden" klicke, wird das Formular gepostet, auch wenn das erforderliche Feld nicht festgelegt wurde.
Wie kann ich den Geokodierungsdienst nur aufrufen, wenn die unauffällige Validierung erfolgreich war?
Anstatt das Ereignis submit()
anzuhängen, müssen Sie ein früheres Ereignis erfassen und steuern, wie Sie vorgehen.
Nehmen wir an, Ihre ursprüngliche Schaltfläche hat die ID submit
und Sie erstellen eine neue Schaltfläche zum Senden mit der ID startSubmit
. Verbergen Sie dann die ursprüngliche Schaltfläche zum Senden, indem Sie das HTML-Attribut display="false"
festlegen. Als Nächstes binden Sie an das click
-Ereignis Ihrer neuen Schaltfläche und fügen Sie Ihren Code wie geändert hinzu:
Dadurch wird die Validierung aufgerufen, sodass die Geokodierung nur ausgeführt wird, wenn das Formular gültig ist. Nachdem die Geocodierung eine Antwort zurückgegeben hat, wird das Formular gesendet, indem das click-Ereignis auf der Schaltfläche zum Senden ausgelöst wird.
Ich habe etwas Ähnliches implementiert (danke an cousellorben), in meinem Fall wollte ich den Text des Submit-Buttons deaktivieren und ändern, aber nur auf Erfolg. Hier ist mein Beispiel:
%Vor%Der einzige Unterschied ist, dass mein Beispiel eine einzelne Schaltfläche verwendet.
Tags und Links asp.net-mvc asp.net-mvc-3 validation unobtrusive-validation