2017-05-09 1 views
2

Je crée un formulaire Web dans C# .net mvc en utilisant mongodb pour stocker des informations. Le formulaire fonctionne avec un objet de société qui a une propriété qui est une liste d'adresses, appelée addressdata. Lorsque le formulaire est soumis, l'objet de la société est envoyé au contrôleur et ensuite retourné dans MongoDB. Les noms d'entrée prennent la formePropriété de liste ignorée par le contrôleur si l'index 0 est manquant

<input type="text" name="Company.addressdata[a].city" /> 

Où "a" est l'index dans la liste. Tout cela fonctionne très bien! La liste des objets d'adresse est créée lors de la soumission et insérée dans mongoDB.

Cependant, je viens d'ajouter la possibilité de supprimer des adresses, et maintenant j'ai des problèmes. J'ai remarqué que lorsqu'un utilisateur supprime la première ligne, toutes les lignes suivantes sont perdues. Ainsi, s'ils suppriment l'index 0, l'objet Company ne remplira pas la liste des adresses et ne sera donc pas dans MongoDB.

Existe-t-il un moyen de contourner ce problème? Est-ce ainsi que c'est conçu pour fonctionner? Il semble que trop de renuméroter toutes les lignes suivantes avec le nouvel index, mais est-ce que cela prend? Ou y a-t-il un autre moyen?

Répondre

1

Dans mon expérience, c'est par conception. Les index doivent commencer à partir de 0, ou vous devez définir vos propres index pour chacun d'eux avec un élément spécial.

Cet article montre un exemple de ce: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

<form method="post" action="/Home/Create"> 

    <input type="hidden" name="products.Index" value="cold" /> 
    <input type="text" name="products[cold].Name" value="Beer" /> 
    <input type="text" name="products[cold].Price" value="7.32" /> 

    <input type="hidden" name="products.Index" value="123" /> 
    <input type="text" name="products[123].Name" value="Chips" /> 
    <input type="text" name="products[123].Price" value="2.23" /> 

    <input type="hidden" name="products.Index" value="caliente" /> 
    <input type="text" name="products[caliente].Name" value="Salsa" /> 
    <input type="text" name="products[caliente].Price" value="1.23" /> 

    <input type="submit" /> 
</form> 

Alors vous avez des options, soit:

  1. indices de mise à jour lors de la suppression ou
  2. Définir des indices arbitraires
+0

Excellent! Indices arbitraires était le chemin à parcourir. Merci!! – Wan