ViewBag vs Model, dans MVC.NET
Ce n'est plus un générique architectural question:
Je suis en train de décider si c'est ok pour mon programmeurs à utiliser "ViewBags" pour transmettre des données à des vues qui acceptent déjà les Modèles.
Ma préférence personnelle est d'éviter ViewBags et établir de Solides Modèles contenant toutes les données de la vue nécessite l':
Approche 1:
MODEL A:
- List of Employees
- Nullable integer, indicating which item from the list is currently selected
- string firstName (empty if index is null)
- string lastname (empty if index is null)
Approche 2:
MODEL A:
- List of Employees
ViewBag:
- ViewBag.Index (indicating which item from the list is currently selected)
- ViewBag.FirstName
- ViewBag.LastName
Quelqu'un peut penser à un argument pourquoi Bookshare 2 serait mieux que de l'approche 1?
merci pour vos commentaires
source d'informationauteur DotNet98
Vous devez vous connecter pour publier un commentaire.
À mon avis, vous devriez jamais utilisation
ViewBag
sans une très, très bonne raison. Brad Thomas réponse souligne un rare exemple d'une de ces bonnes raisons.Dire que vous avez un maître disposition (ou un vue partielle) partagé par l'ensemble d'un site web et des dizaines de fortement typées points de Vue qui ont chacune leur propre Modèle. Comment faites-vous passer des données à la mise en page? Certaines des stratégies que j'ai vu:
Si vous n'avez pas beaucoup de modèles ou c'est juste une ou deux propriétés supplémentaires cela pourrait fonctionner. Cela peut rapidement devenir un entretien cauchemar.
Je éviter de créer un
ModelBase
classe, mais il peut être nécessaire parfois.J'ai vu MVC applications avec plusieurs mises en page tout point de vue pourrait utiliser. Si vos modèles héritent d'une classe de base, vous devrez peut-être avoir une classe de base pour chaque mise en page. Afin d'éviter la duplication des efforts, je voudrais créer un modèle de mise en page pour chacun des modèles. Puis quelque chose comme ça pourrait fonctionner pour vous:
ViewBag
.Il existe de rares cas j'ai peut imaginer de mettre à la disposition de l'info dans le modèle n'a pas de droit d'appel. Il semble assez courant pour les gens à utiliser leurs modèles de domaine comme leur modèle, et vous ne voulez pas mélanger mise en page/afficher les données avec l'entreprise et les données de domaine, par exemple.
Si vous décidez d'utiliser
ViewBag
éviter cela:Il y a des problèmes potentiels évidents, comme l'utilisation de différents capitalisation dans des endroits différents (par exemple,
UserId
au lieu deUserID
). Moins évident, c'est que quelqu'un pourrait accidentellement misViewBag.UserID
à unstring
ouNullable<int>
:Donc, si vous devez utiliser
ViewBag
je vous recommande de quelque chose comme ceci:Personnellement, je vais choisir le Modèle en tant que paramètre, car le modèle est fortement, donc quand il passe à la vue, nous pouvons également contrôler notre paramètre est valide ou non dans le champ mot-clé.
Et le modèle est le meilleur moyen pour l'avenir de la maintenance du code.
Référence pour le présent :
Éviter Viewbag
Lors du passage de l'information à la Disposition de votre point de Vue
Pouvez-vous l'utiliser? Assurez-vous. Devriez-vous utiliser? Dépend de ce que vous essayez de faire. Habituellement, vous voyez le ViewBag réservées à l'envoi de données comme le titre de la page ou quelque chose à cet effet. Vous souhaitez probablement garder les paramètres qui sont remplis à partir de votre base de données dans votre modèle. Principalement en raison de la liaison de modèle ainsi que si vous avez jamais voulu effectuer la validation du modèle.
Ça dépend qu'est-ce que le scénario, si les champs on veut passer sera seulement utilisé dans ce point de vue spécifique et ils ne peuvent être effectués dans le cadre d'une entité ou d'un modèle, puis je voudrais aller avec viewbags sinon, je voudrais en faire un modèle.