MVC 4 Ajax.beginform submit - verursacht vollständiges Postback

7

MVC4 Internet-Projekt

Ich verwende Ajax.BeginForm, um ein Postback mit Validierung durchzuführen, und es wird die gesamte Seite und nicht nur die UpdateTargetID zurückgesendet. Ich habe andere Beiträge auf SO angeschaut und habe die Antwort nicht gefunden. Ich habe ein neues MVC4-Internet-Projekt nur zum Testen erstellt (VS 2012 wurde mit 'ASP.NET und Web Tools 2012.2' aktualisiert).

Hier ist mein Code

Controller

%Vor%

Anzeigen

%Vor%

Die Ausgangsansicht ist:

Nach der Einreichung:

Quellcode für den Körper nach der Einreichung:

%Vor%

Kann jemand sehen, was mit meinem Code falsch ist?

Danke.

    
Joe 06.03.2013, 17:11
quelle

6 Antworten

9

Der Inhalt der UpdateTargetID muss sich in einer Teilansicht befinden und diese Teilansicht muss von der Controller-Post-Aktion aufgerufen werden. Darin antwortete mir per E-Mail (Danke Darin). Sie müssen eine parallele Ansicht verwenden. Ich habe versucht, seine Antwort zweimal zu aktualisieren und die Moderatoren haben es nicht getan oder eine Erklärung dafür geliefert, warum ich meine eigene Antwort für andere posten möchte.

_MyForm-Ansicht:

%Vor%

Hauptansicht:

%Vor%

Controller-Post-Aktion:

%Vor%     
Joe 19.03.2013, 00:47
quelle
11

Ein paar Dinge, die einem in den Sinn kommen, könnten dieses Verhalten verursachen:

  1. In Ihrer Frage haben Sie Ihre Bundle-Registrierungen angezeigt, aber haben Sie sie tatsächlich in Ihre Ansicht oder Ihr Layout aufgenommen? Stellen Sie sicher, dass Sie in Ihrer Ansicht oder Ihrem Layout zuerst jquery.js und dann jquery.unobtrusive-ajax.js (in dieser Reihenfolge) eingefügt haben:

    %Vor%
  2. Das Skript jquery.unobtrusive-ajax.js ist nicht mit jquery 1.9 und höher kompatibel, da es auf dem .live() basiert, das removed in jQuery 1.9 . Wenn Sie aus irgendeinem Grund Ihre jQuery-Version auf 1.9 oder höher aktualisiert haben, funktioniert das nicht. Sie sollten ein Downgrade durchführen.

  3. In Ihrem onSuccess-Callback leiten Sie auf eine URL um, wenn die Controller-Aktion einen JSON zurückgibt. Haben Sie festgestellt, dass dies nicht der Fall ist? Denn wenn eine Weiterleitung mit window.location.href erfolgt, ist es ziemlich normal, dass Sie eine vollständige Neuladung der Seite und keine teilweise Aktualisierung erhalten

Verwenden Sie in allen Fällen ein Javascript-Debugging-Tool, um zu sehen, was genau passiert. Wenn Sie Firefox verwenden, können Sie FireBug verwenden. Wenn Sie Google Chrome verwenden, können Sie die Chrome-Toolbar für Entwickler verwenden. Schau dir die Konsole an, um mögliche JavaScript-Fehler zu erhalten. Sehen Sie auf der Registerkarte "Netzwerk" nach, ob alle Javascripts erfolgreich geladen wurden und keine 404-Fehler vorliegen. Erfahren Sie, wie Sie Ihren JavaScript-Code mit einem Tool debuggen. Sie werden überrascht sein, wie viele Informationen Sie über potenzielle Probleme mit Ihrem Code haben, die Ihnen diese Tools zur Verfügung stellen.

    
Darin Dimitrov 07.03.2013 21:54
quelle
1

verwenden: <script src="../Scripts/jquery.unobtrusive-ajax.js"></script>

Dieses JS ist es, was Ajax zum Funktionieren bringt.

    
Roopali Rawat 20.12.2013 07:43
quelle
1

stellen Sie sicher, dass Sie Ihre Bundles Config dies enthalten haben

%Vor%

bundles.Add (neues ScriptBundle ("~ / bundles / jqueryval"). Include (                         "~ / Scripts / jquery.validate *"));

    
juan 10.02.2016 18:43
quelle
0

Sie benötigen mindestens diese zwei Includes:

%Vor%

Und wenn das immer noch nicht hilft, check in web.config ein und vergewissere dich, dass dezent ist:

%Vor%

Und wenn das immer noch keine Wirkung hat, stellen Sie sicher, dass unauffällige js-Dateien mit der aktuellen jQuery-Version kompatibel sind, egal welche jQuery-Version Sie verwenden, die Sie unter einer folgenden URL finden können:

Ссылка

    
ostati 31.12.2013 17:31
quelle
0

Ein paar andere Dinge zu beachten.

  1. jquery.unobtrusive-ajax.js unterstützt nun JQuery 1.9. Ich habe jquery.unobtrusive-ajax.js Version 3.0.0 installiert und es arbeitet mit JQuery 1.9

2. Stellen Sie sicher, dass alle Abschnitte richtig geschlossen sind, einschließlich der Ansicht, die Ajax.BeginForm und die Hauptansicht enthält. Auch wenn Sie @ Html.Raw () in der Hauptansicht haben oder innerhalb der Ansicht, die Ajax.BeginForm enthält, seien Sie auch vorsichtig.

Hier schreiben, um einen Tag Kopfkratzen zu sparen.

    
JenonD 31.03.2014 23:12
quelle

Tags und Links