2009-05-30 10 views

Antwort

12

Hier ist meine Lösung (ich glaube, es ist eine Progressive enhancement Lösung), nur mit jQuery ohne Plugins:

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

AKTUALISIERT:

Wenn Ihre POST-Antwort "HTML mit Form" ist dann versuchen Sie dies:

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

Das sieht aus wie ich suche. Ich muss versuchen ... –

+0

In "Dein Code hier" Teil schrieb ich $ ("form # YourFormId) .html (Daten); Nach dem ersten Treffer geht alles reibungslos. Aber, auf dem 2. Treffer posts Felder unverändert, bindet mein FormModel falsch und bekommt falsche Antwort.:/ –

+0

Ich habe meine Antwort aktualisiert, aber es ist nicht getestet –

0

Kasse JQuery plugins storage Ich bin sicher, es werden Sie feststellen, dass Sie

+0

Ich habe das jQuery Form Plugin gefunden. Es sieht gut aus, aber ich bin mir nicht sicher, wie man es richtig benutzt. –

+0

ok alles, was Sie brauchen, ist die Aufnahme von Founded Plugin zu Ihrer Site.Master und erstellen Sie die Funktion auf Dom bereit, die Ihre Logik auf Formular senden wird. http://plugins.jquery.com/project/form hier kommt gute Beispiel und hier, wie man in http://malsup.com/jquery/form/ – omoto

+0

Ich möchte das vereinfachen. Die perfekte Lösung wäre etwas wie das Hinzufügen eines kurzen JS Funktionsaufrufs in Form onload. Sie wissen - in kompakter und deklarativer Weise. Ich möchte nicht, dass alle meine Ansichten mit

6

Ajaxify Ihre Formulare müssen ... das ist ziemlich vage.

Wenn Sie ein Formular asynchron übermitteln möchten, können Sie $ .post() verwenden, um eine separate Controller-Aktion zu senden.

Beispiel:

Nach Ansicht:

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

In Ihrem Controller:

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

Das ist, was ich in einigen meiner Formen zumindest bin mit.

P.S .: Ich schrieb dies in den Stackover-Text-Editor, so dass es nicht wirklich getestet wird. Aber als Umriss sollte es funktionieren.