ASP MVC4 - Passer de la Liste pour afficher via le modèle de vue
J'ai un modèle de Personne (avec entre autres les champs le jour de la Naissance)
et je veux passer d'une liste de toutes les personnes, ensemble avec le calcul de l'âge de chaque personne, à la vue
À cet effet:
-
Le modèle de vue
public class vm_PersonList { public Person Person { get; set; } public int age { get; set; } }
-
L'action de contrôleur:
public ActionResult PersonList() { ViewBag.Message = "My List"; var list = new List<vm_PersonList>(); var list_p = new vm_PersonList(); foreach (var p in db.Person) { list_p.Person = p; //the age will be calculated based on p.birthDay, not relevant for the //current question list_p.age = 23; list.Add(list_p); } return View(list); }
-
La vue
@model List<programname.Viewmodels.vm_PersonList> @foreach (var p in Model) { <tr> <td> @p.Person.FullName </td> <td> @p.age </td> </tr> }
La Personne de la table contient, pour l'exemple 6 entrées.
Lors du débogage de l'application que je vois:
À la fin de l'action de controller "liste" contient correctement le 6 Personne différente entrées
Dans la vue, le "Modèle" contient 6 entrées, mais 6 fois, la dernière, "saisie de données".
Quelqu'un aurait-il une suggestion pour résoudre ce problème?
déplacer var list_p = new vm_PersonList(); dans la boucle foreach.
OriginalL'auteur user1416778 | 2012-05-25
Vous devez vous connecter pour publier un commentaire.
Vous utilisez le même
list_p
instance maintes et maintes fois à l'intérieur de la boucle. Si vous êtes constamment à jour sa Personne bien. Et depuisPerson
est un type de référence que vous modifiez la même référence dans la mémoire. Lors de la dernière itération de la boucle vous sont évidemment de remplacer cette référence par la dernière instance de la Personne qui explique pourquoi vous avez vu la même personne dans la vue.Essayer comme cela, semble beaucoup plus facile:
OriginalL'auteur Darin Dimitrov
Vous travaillez sur la même instance de vm_PersonList. Déplacer l'instanciation de vm_PersonList dans la boucle
OriginalL'auteur terjetyl
C'est un problème avec la portée de votre
list_p
instance. Essayez de changer votre code de contrôleur:OriginalL'auteur mattytommo