2010-10-28 9 views
10

Czy można zmodyfikować wartości wpisów na onbegin z ajax.beginform? Muszę zmodyfikować wartości niektórych pól wejściowych po przesłaniu formularza. Ale nawet jeśli zmienię wartości przez js, po stronie serwera w request.form otrzymuję stare wartości, które zostały ustawione początkowo w momencie przesłania formularza. Jak uzyskać zmodyfikowane wartości w pliku request.form?Modyfikuj wysłane wartości wejściowe w onbegin ajax.beginform

Blok kodu jest następujący:

<% 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> 

Teraz, gdy próbuję dostać request.form["txtname"] po stronie serwera, otrzymuję „gaurav” zamiast „gaurav Pandey”.

+0

Proszę napisać dobre pytania, nie możemy dać jednoznacznej odpowiedzi, jeśli nie umieścić wyraźne pytanie – Nealv

+0

@Nealv Cześć, mam pytanie zmodyfikowany. Mam nadzieję, że to pomoże. Dzięki – gaurav

+1

Czy możesz podać kod, który nie działa? – sheikhomar

Odpowiedz

8

Masz ten problem, ponieważ funBegin jest wywoływana po serializowaniu danych formularza. Od MSDN:

AjaxOptions.OnBegin nieruchomości: Pobiera lub ustawia nazwę funkcji JavaScript zadzwonić bezpośrednio przed strona jest aktualizowana.

Proponuję napisać własne przedstawienia Handler:

<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

nie miałem ochoty na zewnątrz złożenia formularza MVC przeładunku więc rozwiązać to inaczej. Wystarczy połączyć się z modułem obsługi przycisku przesyłania formularza. Zrób tam swoją wartość wejściową. Onclick jest uruchamiany przed serializacją postaci MVC. Komenda onclick jest również wywoływana, nawet jeśli formularz został przesłany przez użytkownika, który uderzył i wprowadził.

+1

Po prostu miałem ten sam problem i to mnie uratowało. – Joel

+1

@xanadont Nie działa to dla mnie, czy możesz podać szczegóły, na wypadek gdyby było coś konkretnego, co trzeba zrobić, aby działało poprawnie –

2

Nie ma innego sposobu, aby to zrobić.

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 
    } 
} 

sensu parametrów, patrz [http://api.jquery.com/jquery.ajax/]

0

$ ('# MyForm') przedstawia() nie działa na IE. W przypadku jakiejkolwiek weryfikacji można spróbować utworzyć fałszywą metodę sprawdzania poprawności w celu gromadzenia danych formularza.

jak Jquery.validaton poniżej:

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