Question

J'ai un projet ASP.NET WebForms d'hybride / MVC. Dans mon Maître Page, j'ai un contrôle utilisateur « menu » et un contrôle utilisateur « de bas de page ». Quoi qu'il en soit. Je dois passer des données (2 chaînes) à mon contrôle utilisateur « menu » sur ma page principale (pour sélectionner l'onglet en cours dans mon menu de navigation, etc.) Mes vues sont fortement typés à mon modèle de données. Comment puis-je pousser les données de mon contrôleur à mon menu ou au moins permettre à ma page principale pour accéder à des données prédéfinies dans mon contrôleur?

Note: Je comprends cela viole MVC pur ASP.NET, mais comme je l'ai dit, il est un projet hybride. Le but principal de mon introduction à ASP.NET MVC dans mon projet était d'avoir plus de contrôle sur mon interface utilisateur pour certaines situations seulement.

Était-ce utile?

La solution

Mettez vos cordes dans la collection ViewData,

ViewData["MenuString1"] = "My First String";
ViewData["MenuString2"] = "My Second String";

et les récupérer dans le maître page comme ceci:

myMenu.Property1 = ViewData["MenuString1"].ToString();
myMenu.Property2 = ViewData["MenuString2"].ToString();

http://nerddinnerbook.s3.amazonaws.com/Part6.htm

Autres conseils

Vous pouvez utiliser ViewData pour partager des données entre le contrôleur et afficher ce n'est pas dans le modèle. Dans le contrôleur, faire quelque chose comme ViewData["menu"] = myMenu; puis dans la vue <%= ViewData["menu"] %> faire. Vous pouvez passer des objets, mais vous devez lancer le ViewData [touche] Retour au type d'objet dans la vue.

Une autre façon de le faire est de mettre vos menus et d'autres données relatives à la non-modèle a besoin dans un contrôleur distinct. Ensuite, vous pouvez utiliser RenderAction pour appeler l'action dans votre contrôleur de navigation qui génère le menu. Hack a un blog sur RenderAction qui explique cela plus en détail.

Je me penche vers l'utilisation ViewData pour les valeurs temporaires du contrôleur comme des listes de sélection et un RenderAction pour des choses sans rapport, comme la navigation principale du site.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top