Alternative à ViewBag.Titre dans ASP.NET MVC 3
Par défaut, le nouveau modèle de projet pour ASP.NET MVC 3 ajoute les lignes suivantes à la disposition par défaut (masterpage de rasoir):
<title>@ViewBag.Title</title>
La vue doit alors contenir les éléments suivants pour attribuer le titre de la page, par exemple:
@{
ViewBag.Title = "Log On";
}
Peut-être que c'est juste ma préférence, mais je trouve que l'utilisation de la ViewBag à détenir le titre un peu de mal (je pense à trop de magie-chaîne de saveur). Donc ma question est: Est-ce la meilleure pratique recommandée pour les personnes à l'aide de ASP.NET MVC 3 et rasoir (à l'aide d'une propriété dynamique sac) ou êtes-vous en optant pour quelque chose de plus fortement typé (impliquant peut-être une coutume baseclass?)
- En utilisant le viewbag pour ce qui est excellent comme vous pouvez déclarer la variable dans une page de mise en page, puis spécifiez un titre différent pour chaque vue, qui en hérite. Il n'y a vraiment pas d'autre moyen de le faire sans l'aide d'un typage statique du modèle.
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas qu'il y est quelque chose de mal avec défaut de titre de la fonctionnalité de gestion qui est livré avec asp.net MVC 3, c'est correct de le faire.
Personnellement, je n'ai ce(ci-dessous écrit) pour gérer titre, je ne suis pas approuvant le code ci-dessous ou de dire que son meilleur que les fonctionnalités par défaut, c'est juste une préférence.
Maître
Vue
Une chose que j'ai pu suggérer pour améliorer la fonctionnalité par défaut
Donc à chaque fois que vous oubliez de l'ajouter dans le viewbag, la page de titre de l'écran=
Title Not Set
La création d'une classe de base pour ensuite faire tous vos contrôleurs de héritent de cette classe de base peut également être fait. Mais je pense que sa prend beaucoup de douleur pour
title
.@ViewBag.Title ?? "Default"
approche. Il peut être déplacé à _ViewStart.cshtml et vous pouvez définir des valeurs par défaut à l'ensemble des propriétés communes.ViewBag pour le titre est parfaitement bien (je dirais même qu'elle est l'utilité d'avoir ViewBag) - dynamique n'est pas le mal absolu. "Titre" est bien connu, peu de chances de changer, et même prédéfinis dans les modèles d'affichage. Personnellement, j'utilise titre suivant:
Si vous êtes inquiet à propos de l'insertion d'
ViewBag.Title
vous pouvez faire fort type par la création d'un customWebViewPage
mais vous devrez toujours utiliserViewBag
ou peut-êtreHttpContext.Items
à l'intérieur qui a fortement tapé à la propriété car il existe plusieurs instances deWebViewPage
créé lors du rendu IIRC.Je vous recommande de coller avec
ViewBag
, à la création de propresWebViewPage
parce que cela me semble overkill - même la création de propriété unique sur elle si vous avez déjà personnaliséWebViewPage
est à mon avis juste inutile complication - et qui vient d'une personne qui est souvent overengineering choses.<title>@(ViewBag.Title ?? ViewBag.Title + " | ")Site Name</title>
de le garder aussi court que possible.| Site Name
si le Titre de propriété n'a pas été définie.J'ai aussi de ne pas utiliser le ViewBag, à tous.
En haut de _Layout.shtml ...
Dans _Layout.shtml ...
Dans votre Modèle ...
Dans EveryPageViewModel
Dans votre contrôleur de l'action
Je voudrais créer une PageTitle ActionFilter attributs plutôt que la modification de personne ViewBags
Utilisation: conserver la vue de la même
Pour le régulateur à l'échelle de la page de titre:
Pour les points de vue de chacun:
Code De L'Attribut:
Facile à gérer et fonctionne comme un charme.
Pour moi, personnellement, je pense que ce cas est d'une utilisation acceptable de
ViewBag
. Il est limité à un "bien connue" de la propriété, et il ne sera probablement pas la cause des problèmes dans l'avenir. En fin de compte, il est tout au sujet d'être pragmatique et de trouver une façon d'être aussi rapide que possible. Avoir une classe de base où vous en avez besoin pour définir le titre serait à mon avis beaucoup trop de code pour être vaut le type de sécurité.Bonne chance!
Je dirais que tant que c'est seulement le Titre que vous souhaitez définir, c'est ok pour utiliser le ViewBag. Eh bien, peut-être pas uniquement, au plus 2-3 propriétés.
Mais si vous commencez à voir que vous êtes paramètre de plus en plus (commun) propriétés dans chaque contrôleur de l'action, j'irais avec un typage fort "classe ViewModelBase". Mais c'est juste moi.
nous préférons forte paramètre de titre.. quelques exemples de nos BaseController classe. (Page définit encapsulé vue modal)
Il n'y a rien de mal à utiliser le ViewBag.Title = "Mon Titre";
Tout ce que vous faites est d'utiliser une propriété dynamique.
La question est vraiment l'endroit où l'information doit être "déclaré".
C'est à dire, où est-il le plus accessible pour l'application à la main.
Si c'est sur une base par page, alors que c'est le bon endroit.
Si, toutefois, le titre de la page peut être dérivée du Modèle, alors vous devriez le faire.
Dans ce cas, je serais probablement utiliser une classe de base pour le ViewModel que vous utilisez, et de créer un PageTitle propriété qui contient la logique de dériver le titre de la page de propriétés dans le Modèle.
Donc:
En résumé, les chevaux pour les cours et ne pas avoir peur d'utiliser des propriétés dynamiques... aussi longtemps que vous comprenez ce qu'ils sont et ce qu'ils font.