Mon MVC (.NET) a des valeurs constantes sur tout le site, telles que le numéro de téléphone, l'adresse physique, l'adresse e-mail, etc.
Je voudrais stocker cette valeur une fois, afin que les futures mises à jour soient plus faciles lorsqu'elles changeront leurs détails.
Pour simplifier ma question, je me suis concentré uniquement sur le numéro de téléphone.
Ma question est de savoir où et comment stocker ce numéro et un problème que je rencontre avec ma décision. Pour le moment, j'ai choisi de le stocker dans le fichier Global.asax en tant que méthode statique, par exemple
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
//logic
}
public static string GetPhoneNumber()
{
return "012345 678 910";
}
}
Cela fonctionne très bien, dans mon contrôleur, je peux ajouter des références à cette méthode et l'assigner à un ViewBag
public ActionResult Contact()
{
ViewBag.Phone = MvcApplication.GetPhoneNumber();
}
Selon de nombreux sites, le numéro de téléphone sera visible en haut de chaque page et en tant que tel, le placer dans le _Layout.cshtml
est logique.
Le problème que j'ai, c'est qu'il n'y a pas de contrôleur (pas que je sache) pour le _Layout.cshtml et la seule façon dont je peux transmettre la valeur est d'avoir un ViewBag.Phone configuré pour chaque vue, EG
public class HomeController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
ViewBag.Phone = MvcApplication.GetPhoneNumber();
return View();
}
public ActionResult About()
{
ViewBag.Phone = MvcApplication.GetPhoneNumber();
return View();
}
public ActionResult Contact()
{
ViewBag.Phone = MvcApplication.GetPhoneNumber();
return View();
}
C'est désordonné et malodorant, mais je ne sais pas comment je peux améliorer cela.
Dois-je stocker mes variables globales dans un endroit différent ou existe-t-il une meilleure approche pour cela, car je suis sûr que c'est un problème commun.
ConfigurationManager.AppSettings["MyKey"]
exactement la même manière.@System.Configuration.ConfigurationManager.AppSettings["myKey"]
Using System.Configuration;
déclaration en haut de votre fichierVous pouvez accéder aux constantes globales directement dans votre fichier _Layout.cshtml:
Cependant, je déplacerais ces constantes dans un fichier séparé (j'ai généralement une classe statique Constants.cs) afin de ne pas ajouter de fouillis au fichier global.asax.
Aussi, je les aurais comme propriétés:
plutôt que des méthodes pour pouvoir y accéder n'importe où comme ceci:
S'ils sont susceptibles de changer souvent, il serait préférable d'avoir ces valeurs stockées dans un fichier de configuration ou une base de données afin de ne pas nécessiter de recompilation et de déploiement lorsqu'ils doivent être modifiés.
la source
Dans Global.asax.cs
Dans _Layout.cshtml
la source