Mein MVC (.NET) hat auf der gesamten Website einige konstante Werte, wie z. B. Telefonnummer, physische Adresse, E-Mail-Adresse usw.
Ich möchte diesen Wert einmal speichern, damit zukünftige Updates einfacher sind, wenn sie ihre Details ändern.
Um meine Frage zu vereinfachen, habe ich mich nur auf die Telefonnummer konzentriert.
Meine Frage ist, wo und wie diese Nummer gespeichert werden soll und ein Problem, mit dem ich bei meiner Entscheidung konfrontiert bin. Im Moment habe ich beschlossen, es als statische Methode in der Datei Global.asax zu speichern, z
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
//logic
}
public static string GetPhoneNumber()
{
return "012345 678 910";
}
}
Dies funktioniert sehr gut. In meinem Controller kann ich Verweise auf diese Methode hinzufügen und sie einem ViewBag zuweisen
public ActionResult Contact()
{
ViewBag.Phone = MvcApplication.GetPhoneNumber();
}
Wie auf vielen Websites wird die Telefonnummer oben auf jeder Seite _Layout.cshtml
angezeigt. Daher ist es logisch , sie in die zu platzieren .
Das Problem, das ich habe, ist, dass es für die Datei _Layout.cshtml keinen Controller gibt (den ich nicht kenne). Die einzige Möglichkeit, den Wert zu übergeben, besteht darin, für jede Ansicht ein ViewBag.Phone einzurichten, z
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();
}
Das ist chaotisch und stinkt, aber ich habe keine Ahnung, wie ich das verbessern kann.
Sollte ich meine globalen Variablen an einem anderen Ort speichern oder gibt es dafür einen besseren Ansatz, da ich sicher bin, dass dies ein häufiges Problem ist.
ConfigurationManager.AppSettings["MyKey"]
genauso verwendet.@System.Configuration.ConfigurationManager.AppSettings["myKey"]
Using System.Configuration;
Erklärung oben in Ihrer Datei habenSie können direkt in Ihrer Datei _Layout.cshtml auf globale Konstanten zugreifen:
Ich würde diese Konstanten jedoch in eine separate Datei verschieben (ich habe im Allgemeinen eine statische Klasse Constants.cs), um der Datei global.asax keine Unordnung hinzuzufügen.
Außerdem hätte ich sie als Eigenschaften:
anstatt auf Methoden, damit überall darauf zugegriffen werden kann:
Wenn sie sich wahrscheinlich häufig ändern, ist es besser, diese Werte in einer Konfigurationsdatei oder Datenbank zu speichern, damit sie nicht neu kompiliert und bereitgestellt werden müssen, wenn sie geändert werden müssen.
quelle
In Global.asax.cs
In _Layout.cshtml
quelle