Senden eines Razor-Formulars mit JQuery AJAX in MVC6 unter Verwendung der integrierten Funktionalität
Lesezeit: 7 Minuten
Blake Rivell
Ich würde gerne wissen, ob es eine bestimmte Möglichkeit gibt, ein Formular mit jQuery AJAX in MVC6 zu senden, wobei immer noch die automatischen Bindungsfunktionen von ASP.NET MVC verwendet werden. Ich glaube, dass Sie in anderen Versionen von MVC jquery.unobtrusive-ajax verwenden und einfach verwenden könnten
@using (Ajax.BeginForm("SaveData", new AjaxOptions(){}
Da es einige Änderungen mit MVC6 gegeben hat, frage ich mich, was die neue empfohlene Methode wäre, dies zu tun, außer einen normalen AJAX-Post an den Server zu senden, wenn das Formular gesendet wird. Das heißt, ich würde die Werte jedes Eingabefelds manuell abrufen, sie in JSON umwandeln und an den Controller senden, damit alles an das ViewModel gebunden wird.
Wenn ich das folgende JavaScript für AJAX verwende, spielen die AJAX-Formulareinstellungen überhaupt eine Rolle?
Ajax funktioniert auf die gleiche Weise, aber verwenden Sie anstelle der @Ajax-Hilfsprogramme die neuen MVC 6-Tag-Hilfsprogramme (vergessen Sie nicht, auf die Skripte „jquery“ und „jquery.unobtrusive-ajax“ zu verweisen).
Um die AjaxOptions zu verwenden, die im Ajax Helper in früheren MVC-Versionen vorhanden waren, fügen Sie einfach diese Attribute hinzu und führen Sie das Form-Tag wie folgt aus:
Eine weitere wichtige Änderung besteht darin, wie Sie auf der Serverseite prüfen, ob es sich bei der Anfrage tatsächlich um eine AJAX-Anfrage handelt. Auf früheren Versionen haben wir einfach verwendet Request.IsAjaxRequest().
Auf MVC6 müssen Sie eine einfache Erweiterung erstellen, um dieselben Optionen hinzuzufügen, die in früheren MVC-Versionen vorhanden waren (Originalquelle):
/// <summary>
/// Determines whether the specified HTTP request is an AJAX request.
/// </summary>
///
/// <returns>
/// true if the specified HTTP request is an AJAX request; otherwise, false.
/// </returns>
/// <param name="request">The HTTP request.</param><exception cref="T:System.ArgumentNullException">The <paramref name="request"/> parameter is null (Nothing in Visual Basic).</exception>
public static bool IsAjaxRequest(this HttpRequest request)
{
if (request == null)
throw new ArgumentNullException("request");
if (request.Headers != null)
return request.Headers["X-Requested-With"] == "XMLHttpRequest";
return false;
}
Vielen Dank für die ausführliche Antwort. Also mit all den oben genannten Einstellungen hätte ich das immer noch in meinem JavaScript, oder? $(‘form’).submit(function () { $.ajax({ … }); }); Ob Sie es glauben oder nicht, es hat alles funktioniert, ohne dass außer asp-action=”Create” Einstellungen in der Formulardeklaration angegeben wurden. Vielleicht verstehe ich den Zweck von ‘data-ajax’ und ‘data-ajax-method’ falsch, anstatt nur den Code zu schreiben, den ich oben verwendet habe, um AJAX zu erhalten. Können Sie mir sagen, wie diese Eigenschaften bei meinem AJAX helfen, da es ohne funktionierte? Oder zumindest schien es zu funktionieren, seit ich in der Aktion “Erstellen” gelandet bin
– Blake Rivell
12. Februar 2016 um 15:35 Uhr
Am Ende meines Beitrags habe ich meinen AJAX-Code eingefügt. Wenn Sie also klären könnten, wofür diese Daten-Ajax-Helfer gut sind und was ich habe, wäre das großartig. Ich würde gerne wissen, ob ich beides brauche. Es wäre großartig, wenn ich die eingebaute Unobtrusive Validation weiterhin zusammen mit AJAX verwenden könnte.
– Blake Rivell
12. Februar 2016 um 15:39 Uhr
Sie können diesen JavaScript-Code entfernen. Stellen Sie einfach sicher, dass Sie sowohl auf JQuery als auch auf JQuery unaufdringliches Ajax verweisen. Die Daten-Ajax-Helfer erledigen das für Sie unter dem Holz.
– João Pereira
12. Februar 2016 um 16:00 Uhr
Das ist ein Blick auf den Quellcode für die JQuery Unauffälliges Ajax und Sie erhalten ein klares Bild davon, worum es bei diesen ‘data-ajax’-Attributen geht.
– João Pereira
12. Februar 2016 um 16:10 Uhr
@Jess, es spielt keine Rolle, ob es innen oder außen ist oder das #content div das Formular umschließt. Es hängt alles davon ab, was vom Controller zurückgegeben wird. Wenn der Controller nur die Formularfelder zurückgibt, sollte er drin sein. Wenn der Controller nur eine Erfolgsmeldung zurückgibt, dann sollte es draußen sein. Wenn der Controller eine Teilansicht zurückgibt, die ein Formular enthält, muss #content das aufrufende Formular umschließen. Ich hoffe es hilft!
Weiß jemand, wie man die Antwort vom Callback “data-ajax-failure” erhält? Ich werfe benutzerdefinierte Ausnahmen im Backend aus und möchte dem Benutzer basierend auf dem Ausnahmetyp in der Antwort benutzerdefinierte Fehlerrückmeldungen anzeigen. Aber ich kann einfach nicht herausfinden, wie ich die Antwort im Rückruf erfassen kann. Dies muss möglich sein. Nein?
Fügen Sie schließlich die Skripte hinzu, die Sie zum Anzeigen benötigen, überprüfen Sie den folgenden Code
<script>
function SuccessCreate(data) {
console.log(data);
$("#tbodyPerson").append(data);
}
function SuccessDelete(data) {
$("#tr" + data.id).fadeOut();
}
</script>
<script src="https://stackoverflow.com/questions/35202804/~/js/AjaxHelper.js"></script>
Dies kann zwar die Frage beantworten, es wäre jedoch vorzuziehen, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verlinkte Seite ändert.
– Rallen
23. Mai 2019 um 14:01 Uhr
Ich habe die Änderungen vorgenommen, okay? @Rallen
– Behrouz Goudarzi
23. Mai 2019 um 14:18 Uhr
11866700cookie-checkSenden eines Razor-Formulars mit JQuery AJAX in MVC6 unter Verwendung der integrierten Funktionalitätyes