I ASP.NET 5 MVC RC1
Wie in ASP.NET MVC verhindern jquery ajax einreichen, wenn die Validierung fehlschlägt
die jQuery Validierung Plugins bin, die meine ASP.NET MVC verwendet der Standard jquery.validate.js ist, dass ein ASP.NET Standard 5 Vorlagenprojekt verwendet.
/*!
* jQuery Validation Plugin v1.14.0
*
* http://jqueryvalidation.org/
*
* Copyright (c) 2015 Jörn Zaefferer
* Released under the MIT license
*/
und jquery.validation.unobtrusive.js
/*!
** Unobtrusive validation support library for jQuery and jQuery Validate
** Copyright (C) Microsoft Corporation. All rights reserved.
*/
I bietet ein einfaches Pflichtfeld Beispiel unten mein Problem zu demonstrieren.
Ansichtsmodell:
public class TierImportStatusUpdateViewModel
{
[Required]
public string String1 { get; set; }
[Required]
public string String2 { get; set; }
//more fields
}
cshtml:
@model MyViewModel
<form action="/controller/action" data-ajax="true" data-ajax-method="POST" data-ajax-mode="replace" data-ajax-update="#dic1" id="form1" method="post" class="allforms">
@Html.LabelFor(model=>model.String1)
@Html.EditorFor(model=>model.String1)
@Html.ValidationMessageFor(model=>model.String1)
<br>
@Html.LabelFor(model=>model.String2)
@Html.EditorFor(model=>model.String2)
@Html.ValidationMessageFor(model=>model.String2)
<br>
<button type="submit" class="btn btn-primary" id="submit" name="submit">submit</button>
</form>
Die obige Validierung korrekt funktioniert. Wenn String1
nicht in der Form erfasst wird, wird die POST
Methode nicht aufgerufen und Fehlermeldung wird auf der Clientseite angezeigt.
Ich benutze das folgende Jquery dann, als ich alle Formular abschickt fangen möchte und einige zusätzliche Logik tun:
$(".allforms").submit(function (e) {
e.preventDefault();
var self = this;
$.ajax({
processData: false,
contentType: false,
data: new FormData(this),
type: $(this).attr('method'),
url: $(this).attr('action'),
success: function (data) {
//other logic
}
});
return (false);
});
Diese Funktion arbeitet jquery und mein Controller-Methode aufrufen, wenn die Schaltfläche geklickt wird. Wenn jedoch String1
nicht erfasst wird und auf "Senden" geklickt wird, tritt die Validierung ein und zeigt die Fehlermeldung an, aber die jquery-Funktion zeigt das Formular weiterhin an.
Wie verhindere ich, dass die jquery-Funktion die Ajax-Methode nicht aufruft, wenn die vorhandenen Validierungsfelder fehlgeschlagen sind?
Ich brauche keine eigene Validierung, da die Validierungsmeldung auf dem Bildschirm angezeigt wird. Ich muss nur die
Das einzige, was einreichen verhindere ich in meiner Form finden könnte, ist die einzelnen Validierungsfelder zB
<span class="text-danger field-validation-valid" data-valmsg-for="String1" data-valmsg-replace="true"></span>
und die Form hat nur die novalidate=novalidate
-Tag, das die jquery.validate.js
auf alle Formen fügt es ist aktiviert.
Sie haben dieses Plugin überhaupt nicht in Ihrem Code verwendet. – Jai
Ich habe meine Antwort aktualisiert, um eine Lösung für den Fall wiederzugeben, in dem ein einfacher Handler für alle Formulareinreichungen verwendet wird. – JotaBe