2012-06-10 26 views
5

¿Alguien sabe de algún error u otra información para explicar por qué cuando se usa MVC4 con jquery mobile, cualquier formulario creado con Ajax.BeginForm da como resultado que el formulario presentado dos veces al controlador.MVC 4, Jquery Mobile, Ajax.BeginForm causando que los formularios se envíen dos veces

en principio había pensado que ya que estoy usando el js agrupación que el mismo archivo JS podría haber sido ser incluido dos veces y podría desencadenar en el formulario de envío, sin embargo eso no es el caso, mi lista de archivos js son:

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 

Dentro del proyecto, Ajax está completamente habilitado para todo, es decir, no estoy deshabilitando nada a través de mobileinit.

No he publicado ningún código de formulario porque ocurre literalmente en todos los formularios (un formulario con un campo y un botón de envío provocará el envío dos veces), pero solo cuando se utiliza Ajax.BeginForm.

Html.BeginForm no presenta ninguno de estos problemas.

He estado atrapado en esto durante unos días ahora lo que cualquier ayuda sería muy apreciada

+2

Pruébelo sin hacer referencia a los archivos 'Microsoft * .js'. Desde MVC3 no son necesarios para la validación discreta y para los ayudantes 'Ajax'. – nemesv

+0

Gracias por la respuesta nemesv. Desafortunadamente, eliminar los archivos de Microsoft * .js no ayudó con este problema en particular –

Respuesta

7

jQuery Mobile por defecto hi-jacks cualquier forma de presentación y realiza su propia petición AJAX. Para detener este comportamiento, puede colocar el atributo data-ajax="false" en cualquier etiqueta <form>. Asimismo, asegúrese de detener el comportamiento regular de la forma por lo que no se somete normalmente, algo así como:

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

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

También puedes, simplemente utilizar el incorporado en jQuery Mobile AJAX en lugar de incluyendo JS extra por ello. Lo cual solo requeriría que realice los atributos action de los formularios en el archivo del lado del servidor en el que se publican.

+0

Brillante, muchas gracias por la excelente respuesta de Jasper. –

+0

@Jasper ... Gran respuesta trabajando excelente :) –

Cuestiones relacionadas