2010-10-28 17 views
10

¿Se pueden modificar los valores de entrada publicados en onbegin de ajax.beginform? Tengo que modificar los valores de algunos de los campos de entrada después de enviar el formulario. Pero incluso si cambio los valores a través de js, en el lado del servidor en request.form obtengo los valores anteriores que se configuraron inicialmente en el momento del envío del formulario. ¿Cómo obtener los valores modificados en request.form?Modificar los valores de entrada publicados en el inicio de ajax.beginform

El bloque de código es el siguiente:

<% using(Ajax.BeginForm("action", "controller", 
    new AjaxOptions{onbegin="funBegin",oncomplete="funComplete"})){ 
%> 

<input type="text" id="txtName" name="txtName" value="gaurav"/> 
<input type="text" name="txtAge" value="26"/> 
<input type="submit" value="click here" /> 

<% } %> 

<script type="text/javascript"> 
    function funBegin() { 
     $("#txtName").val("gaurav pandey"); 
    } 
    function funBegin(result) { 
     $("#divParent").html(result.get_data()); 
    } 
</script> 

Ahora cuando intento de conseguir request.form["txtname"] del lado del servidor, estoy consiguiendo "Gaurav" en lugar de "Pandey Gaurav".

+0

favor, escribir buenas preguntas, no podemos dar una respuesta directa si no enviar una pregunta clara – Nealv

+0

@Nealv: Hola, He modificado la pregunta. Espero eso ayude. Gracias – gaurav

+1

¿Puedes proporcionar el código que no está funcionando? – sheikhomar

Respuesta

8

Tiene este problema porque se llama a funBegin después de que se hayan serializado los datos del formulario. De MSDN:

AjaxOptions.OnBegin propiedad: Obtiene o establece el nombre de la función JavaScript para llamar inmediatamente antes de que se actualice la página.

que recomendamos que escriba su propio manejador presentar:

<form id="myform" action="/Home/MyAction"> 
    <input type="text" id="txtName" name="txtName" value="gaurav" /> 
    <input type="submit" value="Submit" /> 
</form> 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#myform').submit(function() { 
      $("#txtName").val("gaurav pandey"); 

      var form = $(this); 
      var url = form.attr('action'); 
      var formData = form.serialize(); 
      $.post(url, formData, function(result) { 
       // Do something with result 
      }); 

      return false; 
     }); 
    }); 
</script> 
15

Yo no tenía ganas de salir a la calle de manejar por lo que el envío de formularios de MVC He resuelto esto de manera diferente. Solo agréguese al manejador de clics del botón de envío del formulario. Haga su valor de entrada toqueteando allí. El onclick se activa antes de la serialización de formularios de MVC. El onclick también se llama incluso si el formulario es enviado por el usuario al marcar , ingrese.

+1

Acabo de tener el mismo problema y esto me salvó. – Joel

+1

@xanadont Esto no funciona para mí, podría publicar detalles, por favor, en caso de que haya algo específico que deba hacerse para que funcione –

2

Hay otra manera de hacerlo:.

function funBegin(jqXHR, settings) { 
    // before POST - change whatever posted value you want and then 
    // serialize again your form supposedly identified here by form 

     settings.data = form.serialize(); 

    // the advantage is when you arrive here, the form validators have already been executed 
    // and you know you have valid values - so you can post 
    } 
} 

Para el significado de los parámetros, ver [http://api.jquery.com/jquery.ajax/]

0

$ ('# MyForm') enviar() no funcionará en IE. Si hay alguna validación, puede intentar crear un método de validación falso para recopilar datos del formulario.

como Jquery.validaton a continuación:

jQuery.validator.addMethod("fakeMethod", function (value, element) { 
       YOUR DOM CODE HERE!!! 
       return true; 
      }, ""); 
Cuestiones relacionadas