Question

Avoir un problème un peu poilu lors de la soumission de données sur un appel jQuery ajax. Fondamentalement, les valeurs de formulaire des champs de formulaire ajoutés dynamiquement à l'écran dans une grille tubulaire à l'aide de jquery ne sont pas mises à jour à l'aide d'une commande de sauvegarde par lot.

En gros, j'ai une liste de grille qui affiche toutes les lignes actuelles sauvegardées dans la base de données, chaque colonne contenant des champs de formulaire. J'ai ensuite un formulaire en haut de la page, qui est votre ajout typique d'un autre formulaire de détail. Vous tapez vos valeurs, appuyez sur & Quot; add & Quot; ceci est enregistré dans la base de données via un appel jquery json ajax, et vos données de formulaire sont ajoutées et reflétées dans une nouvelle ligne de la table listings. (cette partie fonctionne)

Mon problème réside dans le fait de modifier les valeurs de formulaire dans la nouvelle ligne de tableau jQuery ajoutée . Lorsque le bouton de sauvegarde est enfoncé, seule l'une des lignes de la table déjà construite sera réenregistrée. Les données de votre formulaire de ligne dynamique ne n'enregistrent pas . L'appel de mise à jour utilise jquery ajax et la liaison de modèle ASP.NET MVC. Sur le & Quot; ajoutez & Quot; Je retourne un asp.net mvc & Quot; vue partielle & Quot; à ma réponse ajax jquery et il est ajouté à une table de liste de grille en utilisant $("#tablename tr:last").after(result).

Ce que j’en ai déjà déduit, c’est que la nouvelle ligne ajoutée dynamiquement ne se met pas à jour. Un ensemble IList<Item> est renvoyé dans ma liste de liaisons de modèle MVC à la méthode d'action de mon contrôleur, qui contient la liste complète des éléments, moins les lignes de champ de formulaire ajouté dynamiquement jquery créées. C'est le problème et pourquoi, lorsque vous effectuez un rafraîchissement de page, les lignes reviennent aux valeurs de formulaire d'origine entrées lors de l'ajout initial.

Des idées pour lesquelles mes <=> n'incluraient pas ces lignes ajoutées dynamiquement? En inspectant Firebug, ils utilisent le même couvent de nommage dans leur attribut de nom et tout devrait bien se passer.

Graham.

Mise à jour 1 mai 11 h 00 GMT + 10: je reçois les valeurs lorsque je modifie la liaison de modèle d'IList à FormCollection. Je ne veux pas avoir à utiliser FormCollection plutôt que la liaison de modèle, mais cela pose la question de savoir si je peux l'obtenir correctement via FormCol, pourquoi ne pas relier le modèle IList? J'ai comparé l'entrée du tableau à un élément de travail et ils correspondent tous aux mêmes critères et valeurs.

Était-ce utile?

La solution

Je ne suis pas un programmeur ASP, mais je fais énormément de travail jQuery. Si je comprends bien votre problème, vos lignes générées dynamiquement ne sont pas liées aux fonctions de rappel qui effectueront vos opérations de mise à jour.

Vous pouvez lier les éléments générés dynamiquement à un rappel en utilisant la fonction 'live' de jQuery (comme Wikidkaka essayait de vous le dire) ou vous pouvez lier manuellement les éléments nouvellement créés dans la fonction de rappel déclenchée lors de l’appel revient.

Je vous recommanderais d'utiliser la fonction live native qui a été ajoutée (je crois) dans la dernière version de jQuery. Cela vous évitera d’écrire des lignes supplémentaires pour lier manuellement les rappels et facilitera la maintenance du code.

Alors changez

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

à

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

Autres conseils

Utilisez le plugin livequery pour ce que vous essayez de faire. Vous pouvez le trouver ici: http://docs.jquery.com/Plugins/livequery

Ceci ne fonctionne pas sur la plupart des éléments ajoutés dynamiquement:

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

Mais avec le plugin livequery, vous pouvez le faire fonctionner en modifiant votre code JS comme ci-dessous:

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

Si la propriété de votre modèle est une liste d'entiers, vous pouvez utiliser IEnumerable<int> pour obtenir la liaison de modèle automatique. Cela fonctionne à la fois pour une méthode Action dont le paramètre est un <=> et une méthode Action dont le paramètre est un modèle ayant une propriété qui est un <=>. Par exemple, comme ceci:

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

et

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

ou

public ActionResult Update(MyModel myModel) { }
public class MyModel {
    public IEnumerable<int> myField { get; set; }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top