2012-06-10 5 views
5

Kennt jemand irgendwelche Bugs oder andere Erkenntnisse, um zu erklären, warum bei Verwendung von MVC4 mit jquery mobile jedes Formular, das mit Ajax.BeginForm erstellt wird, das Formular enthält zweimal an den Controller gesendet.MVC 4, Jquery Mobile, Ajax.BeginForm, die das Senden von Formularen verursacht

ich ursprünglich gedacht hatte, dass da ich die js bin mit, dass die gleiche js Datei Bündelung könnte zweimal enthalten sind wurden, und könnte auf Form auslösen werden einreichen, das ist aber nicht der Fall ist, meine Liste der js-Dateien sind:

jquery-1.6.4.js 
jquery-ui.1.8.11.js 
jquery.mobile-1.1.0.js 
jquery.unobtrusive-ajax.js 
jquery.validate.js 
knockout-2.0.0.js 
MicrosoftAjax.js 
MicrosoftMvcAjax.js 
MicrosoftMvcValidation.js 
Modernizr.js 

Innerhalb des Projekts ist Ajax vollständig für alles aktiviert, dh ich mache nichts durch mobileinit.

Ich habe keinen Formularcode gepostet, weil es buchstäblich mit jedem Formular passiert - ein Formular mit einem Feld und einem Absenden-Button wird die Einreichung zweimal verursachen - aber nur wo Ajax.BeginForm verwendet wird.

Html.BeginForm zeigt keine dieser Probleme.

Ich habe auf diese für ein paar Tage aufgeklebt jetzt so wäre jede Hilfe sehr

+2

Versuchen Sie es, ohne auf die 'Microsoft * .js'-Dateien zu verweisen. Seit MVC3 werden sie für die unauffällige Validierung und für die 'Ajax.'-Helfer nicht benötigt. – nemesv

+0

Danke für die Antwort nemesv. Leider hat das Entfernen der Microsoft * .js-Dateien bei diesem speziellen Problem nicht geholfen –

Antwort

7

jQuery Mobile standardmäßig hallo-Buchsen jede Form Vorlage erkannt werden und führt seine eigenen AJAX-Request. Um dieses Verhalten zu stoppen, können Sie das Attribut data-ajax="false" auf einem beliebigen Tag <form> platzieren. Stellen Sie außerdem sicher, dass das regelmäßige Verhalten der Form zu stoppen, so dass es nicht normal einreichen, so etwas wie:

$('#my-form').on('submit', false); 

Docs: http://jquerymobile.com/demos/1.1.0/docs/forms/forms-sample.html

Sie könnten auch nur die eingebaute in verwenden jQuery Mobile AJAX anstatt inklusive extra JS dafür. In diesem Fall müssen Sie nur die Attribute action der Formulare in die serverseitige Datei schreiben, an die sie gesendet werden.

+0

Brilliant, vielen Dank für die tolle Antwort Jasper. –

+0

@Jasper ... Tolle Antwort funktioniert super :) –

Verwandte Themen