Frage

ein bisschen ein haariges Problem haben, wenn Daten über einen Jquery Ajax-Aufruf einreichen. Grundsätzlich Formularwerte von Formularfeldern, die gewesen sind dynamisch hinzugefügt auf den Bildschirm in ein Gitterrohr jquery Verwendung nicht auf einem Batch-Befehl Speicher zu aktualisieren.

Im Prinzip habe ich eine Raster Liste, die alle aktuellen Zeilen in die Datenbank mit jeder Spalte enthält Formularfelder gespeichert anzeigt. Ich habe dann ein Formular oben auf der Seite, die die typischen ist fügen Sie ein weiteres Detailformular. Sie geben Ihre Werte, drücken Sie „add“ diese in die Datenbank über einen jquery json Ajax-Aufruf gespeichert wird, und Ihre Formulardaten werden hinzugefügt und in einer neuen Zeile in der Listings Tabelle wider. (Dieser Teil funktioniert)

Mein Problem liegt bei, wenn Sie wollen die Form Werte in der neu hinzugefügten jquery Tabellenzeile ändern. Wenn die Speichertaste gedrückt wird, wird nur eine der bereits Tabellenzeile eingebaute wird neu gespeichert werden. Ihre dynamischen Reihe von Formulardaten haben nicht speichern. Der Update Aufruf verwendet Jquery Ajax und ASP.NET MVC-Modell zu binden. Auf die Schaltfläche „Hinzufügen“ Ich habe eine asp.net Mvc „Teilansicht“ auf meine Jquery Ajax Antwort zurückkehre und es zu einem Raster wird die Auflistung Tabelle hinzugefügt $("#tablename tr:last").after(result) verwendet wird.

Was ich bereits geschlossen haben, wie gesagt, die neue dynamisch hinzugefügt Zeile nicht aktualisiert. Ich habe eine IList<Item> Satz in meinem MVC Modell Bindungsliste zu meinen Controller Aktionsmethode zurückgeführt, die die gesamte Liste der Elemente enthält, minus die neu erstellten jquery dynamischen schöpfFormularFeldZeilen. Das ist das Problem und warum, wenn Sie eine Aktualisierung der Seite durchführen, die Zeilen sind wieder auf die Original Formular eingegebenen Werte auf Anfangs zus.

Irgendwelche Ideen, warum meine IList<Item> die nicht diese dynamisch hinzugefügt Zeilen enthalten würde? Inspizieren in Firebug verwenden sie die gleiche Namensgebung Kloster in ihrem Namen Attribut und es sollte alles in Ordnung sein.

Graham.

Aktualisieren 1. Mai 11.00 Uhr GMT + 10: Ich erhalte nicht die Werte, wenn das Modell Bindung von IList Formcollection ändern. Ich will nicht zu haben, eher Formcollection zu verwenden, als Modell verbindlich, aber es stellt sich die Frage, ob ich es richtig durch FormCol bekommen kann, warum nicht IList Binder Modell? Ich habe den Array-Eintrag zu einem Arbeits Elemente verglichen, und sie alle passen die gleichen Kriterien und Werte.

War es hilfreich?

Lösung

Ich bin kein ASP-Programmierer, aber ich habe eine verdammt viel von jquery Arbeit. Wenn ich Ihr Problem richtig verstehe, Ihre dynamisch generierten Zeilen werden nicht an die Callback-Funktionen gebunden zu sein, die Ihre Update-Operationen durchführen wird.

Sie können die dynamisch generierten Elemente zu einem Rückruf durch entweder binden die jQuery ‚live‘ Funktion (als Wikidkaka versucht, Ihnen zu sagen) oder Sie können die neu erstellten Elemente manuell in der Callback-Funktion binden, die ausgelöst wird, wenn die Ajax Aufruf gibt.

Ich würde empfehlen, die native Live-Funktion, die in wurde (glaube ich) die neueste Version von jQuery. Es wird Sie davor bewahren zusätzliche Zeilen schreiben manuell die Rückrufe zu binden und Code Wartung erleichtert.

So ändern:

$('div.your-save-buttons').click(updateFunction);

$('div.your-save-buttons').live(updateFunction);

Andere Tipps

Mit dem Plugin für livequery, was Sie zu tun versuchen. Sie können es hier finden - http://docs.jquery.com/Plugins/livequery

Das funktioniert nicht bei den meisten dynamisch hinzugefügt Elementen:

$("select something").onSomeEvent("do something");

Aber mit livequery-Plugin können Sie es, indem Sie Ihre JS-Code, um so etwas wie unten funktioniert:

$("select something").livequery('event name','do something');

Wenn die Eigenschaft auf dem Modell ist eine Liste von ganzen Zahlen, können Sie IEnumerable<int> verwenden automatisches Modell zu erhalten verbindlich. Dies funktioniert sowohl für eine Aktion Methode, deren Parameter ist eine IEnumerable<int> und eine Aktions Methode, deren Parameter ist ein Modell, das eine Eigenschaft hat, die ein IEnumerable<int> ist. Zum Beispiel wie folgt aus:

<%= Html.Hidden("myField", 1) %>
<%= Html.Hidden("myField", 1) %>

und

public ActionResult Update(IEnumerable<int> myField) { }

oder

public ActionResult Update(MyModel myModel) { }
public class MyModel {
    public IEnumerable<int> myField { get; set; }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top