Comportement étrange avec rendu
-
14-11-2019 - |
Question
Sur une vue que j'appelle Render Action avec à partir d'une boucle, l'action créera un tableau d'objets et reviendra dans un partielView avec une grille pour afficher les résultats.
Voir:
foreach (var item in Model)
<%Html.RenderAction("GridData", "Customer", new {passidx = (new Random().Next(50))});%>
Manette:
public ActionResult GridData(int passidx)
{
List<Customer> cList = new List<Customer>{new Customer() { name = "c" + (1 + passidx).ToString(), address = "a" + (1 + passidx).ToString() },
new Customer() { name = "c" + (2 + passidx).ToString(), address = "a" + (2 + passidx).ToString() }};
return View(cList);
}
Environ 2 sur 3 fois, je rafraîchis la page Les valeurs pour chaque élément des grilles sont les mêmes, même si je passe un nombre aléatoire à chaque action qui est annexée au texte affiché.
La solution
au lieu d'appeler new Random()
dans foreach
, déclarez une instance avant foreach
. Vous obtenez du double car il utilise la même graine.
Regarde ça très bonne réponse.
Exemple:
Random random = new Random();
foreach (var item in Model)
<%Html.RenderAction("GridData", "Customer", new {passidx = (random.Next(50))});%>
Autres conseils
Il semble que ce soit la portée de la variable qui cause le problème. Si je déclare aléatoire ou int ou quoi que ce soit à l'intérieur de la boucle, cela ne fonctionne pas, le déplacer à l'extérieur le fait.