Nous avons un modèle (par exemple, List<string>
). La fonction qui construit la liste est non déterministe et la sortie est nécessaire pour être référencée à la fois dans le contrôleur et dans la vue pendant la durée de vie de la requête. Comme c'est par requête, il ne peut pas être statique ou singleton.Comment gérer les données partagées entre le contrôleur et la vue dans ASP.NET MVC?
Il s'agit d'une structure commune qui peut être référencée à partir de n'importe quelle vue ou contrôleur.
Puisque nous ne pouvons pas accéder au contrôleur à partir de la vue (par principe, et nous sommes d'accord), nous ne pouvons pas le garder dans le contrôleur. Nous le conservons actuellement dans le dictionnaire ViewData
et l'initialisons dans le contrôleur ou dans la vue (si le contrôleur n'en a pas besoin).
Nous pensons qu'utiliser ViewData
à cet effet n'est peut-être pas idéal car il n'est pas créé pour être consommé par un contrôleur en premier lieu. Existe-t-il un meilleur moyen de partager des données communes par requête entre le contrôleur et la vue? Sinon, nous resterons avec ViewData
.
Il y a HttpContext.Items
dictionnaire mais je ne suis pas sûr que cela corresponde à ce but.
"Il existe un dictionnaire HttpContext.Items mais je ne suis pas sûr que cela corresponde à ce but." - ça rentre. Utiliser ça. –
"initialisez-le dans une vue ou un contrôleur, selon celui qui s'exécute en premier." - Comment une vue peut-elle fonctionner avant le contrôleur? –
effectivement AFAIK ViewData * est * HttpContext.Current.Items sous le capot. Et depuis quand "ViewData est-il créé pour être consommé par un contrôleur"? Il est consommé par le * View *, où les données sont * fournies * par le contrôleur. – RPM1984