Quelle est votre façon de transmettre des données à la page maître (à l'aide d'ASP.NET MVC) sans enfreindre les règles MVC?
Personnellement, je préfère coder un contrôleur abstrait (contrôleur de base) ou une classe de base qui est passée à toutes les vues.
c#
.net
asp.net
asp.net-mvc
Łukasz Sowa
la source
la source
Réponses:
Si vous préférez que vos vues aient des classes de données de vue fortement typées, cela peut fonctionner pour vous. D'autres solutions sont probablement plus correctes mais c'est un bel équilibre entre le design et l'aspect pratique à mon humble avis.
La page maître prend une classe de données de vue fortement typée contenant uniquement des informations pertinentes:
Chaque vue utilisant cette page maître utilise une classe de données de vue fortement typée contenant ses informations et dérivant des données de vue des pages maîtres:
Puisque je ne veux pas que les contrôleurs individuels sachent quoi que ce soit sur la compilation des données des pages maîtres, j'encapsule cette logique dans une usine qui est transmise à chaque contrôleur:
L'héritage correspond au maître pour bien visualiser la relation, mais quand il s'agit de rendre les partiels / contrôles utilisateur, je vais composer leurs données de vue dans les données de vue des pages, par exemple
Ceci est un exemple de code uniquement et n'est pas destiné à être compilé tel quel. Conçu pour ASP.Net MVC 1.0.
la source
Je préfère séparer les éléments de la vue principale basés sur les données en partiels et les rendre à l'aide de Html.RenderAction . Cela présente plusieurs avantages distincts par rapport à l'approche populaire d'héritage du modèle de vue:
la source
ÉDITER
Generic Error a fourni une meilleure réponse ci-dessous. Lisez-le s'il vous plaît!
Réponse originale
Microsoft a en fait publié une entrée sur la manière «officielle» de gérer cela. Cela fournit une étape par étape avec une explication de leur raisonnement.
En bref, ils recommandent d'utiliser une classe de contrôleur abstraite, mais voyez par vous-même.
la source
Les contrôleurs abstraits sont une bonne idée, et je n'ai pas trouvé de meilleur moyen. Je suis également intéressé de voir ce que d'autres personnes ont fait.
la source
J'ai fait quelques recherches et suis tombé sur ces deux sites. Peut-être pourraient-ils aider.
Astuce ASP.NET MVC # 31 - Passage de données aux pages maîtres et aux contrôles utilisateur
Passage de données aux pages maîtres avec ASP.NET MVC
la source
Je trouve qu'un parent commun pour tous les objets de modèle que vous passez à la vue est exceptionnellement utile.
De toute façon, il y aura toujours des propriétés de modèle communes entre les pages.
la source
L'objet Request.Params est modifiable. Il est assez facile d'y ajouter des valeurs scalaires dans le cadre du cycle de traitement des demandes. Du point de vue de la vue, ces informations auraient pu être fournies dans QueryString ou FORM POST. hth
la source
Je pense qu'un autre bon moyen pourrait être de créer une interface pour la vue avec une propriété comme ParentView d'une interface, afin que vous puissiez l'utiliser à la fois pour les contrôles qui nécessitent une référence à la page (contrôle parent) et pour les vues principales qui doivent être accessibles à partir de vues.
la source
Les autres solutions manquent d'élégance et prennent trop de temps. Je m'excuse d'avoir fait cette chose très triste et appauvrie presque un an plus tard:
Il est donc clair que j'ai cette méthode statique Get () sur SiteMasterViewData qui renvoie SiteMasterViewData.
la source