2009-05-30 13 views

Odpowiedz

12

Oto moje rozwiązanie (myślę, że jest to rozwiązanie Progressive enhancement), używając tylko jQuery bez jakichkolwiek wtyczek:

var form = $('form#YourFormId'); 
$(':submit', form).click(function (event) { 
    event.preventDefault(); 
    $.post(form.attr('action'), form.serialize(), 
     function(data, status) { 
      if(status == 'success') { 
       // your code here 
      } 
     } 
    ); 
}); 

AKTUALIZACJA:

Jeśli odpowiedź POST "HTML z formą" następnie spróbuj tego:

function ajaxifyForm(form) { 
    $(':submit', form).click(function (event) { 
     event.preventDefault(); 
     $.post(form.attr('action'), form.serialize(), 
      function(data, status) { 
       if(status == 'success') { 
        var newForm = $(data); 
        ajaxifyForm(newForm); 
        form.after(newForm).remove(); 
       } 
      } 
     ); 
    }); 
} 
+1

Wygląda na to, czego szukam. Muszę spróbować ... –

+0

W części "Twój kod tutaj" napisałem $ ("formularz # YourFormId) .html (dane) ;, po pierwszym trafieniu wszystko idzie gładko, ale na drugim trafieniu pola zostają niezmienione, wiąże mój formularz. źle i otrzymuje błędną odpowiedź.:/ –

+0

Zaktualizowałem moją odpowiedź, ale nie jest to testowane –

0

Zamówienie JQuery plugins storage Jestem pewien, że okaże się, że trzeba

+0

Znalazłem wtyczkę jQuery Form. Wygląda ładnie, ale nie wiem, jak go właściwie używać. –

+0

ok wszystko, czego potrzebujesz, to dołączenie założonej wtyczki do witryny site.master i utworzenie funkcji w domenie gotowej, która wykona Twoją logikę na formularzu przesłanym. http://plugins.jquery.com/project/form tutaj jest dobry przykład i tutaj, jak być w http://malsup.com/jquery/form/ – omoto

+0

Chcę to uprościć. Idealnym rozwiązaniem byłoby np. Dodanie 1 krótkiego wywołania funkcji JS w formie onload. Wiesz - w bardziej zwarty i deklaratywny sposób. Nie chcę, aby wszystkie moje poglądy były pomieszane z

6

Ajaxify formularzy ... to jest dość niejasne.

Jeśli chcesz przesłać formularz asynchronicznie, możesz użyć $ .post() do wysłania do osobnej akcji kontrolera.

Przykład:

W widoku:

$.post('<%= Url.Action("DoAjaxCall") %>', $('form').serialize(), 
function (data) { 
    alert(data.Message); 
} 
, "json"); 

W kontrolerze:

public ActionResult DoAjaxCall(YourModel model) 
{ 
    return Json(new { Message = "Your ajax call is working!" }); 
} 

To właśnie używam w niektórych moich postaciach przynajmniej.

P.S .: Napisałem to w edytorze tekstu stackoverflow, więc nie jest tak naprawdę przetestowane. Ale jako zarys powinien działać.

Powiązane problemy