Mój MVC (.NET) ma pewne stałe wartości w całej witrynie, takie jak numer telefonu, adres fizyczny, adres e-mail itp.
Chciałbym zapisać tę wartość raz, aby przyszłe aktualizacje były łatwiejsze, gdy zmienią swoje dane.
Aby uprościć moje pytanie, skupiłem się tylko na numerze telefonu.
Moje pytanie dotyczy tego, gdzie i jak przechowywać ten numer, oraz problemu, który napotyka moja decyzja. W tej chwili postanowiłem zapisać go w pliku Global.asax jako metodę statyczną, np
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
//logic
}
public static string GetPhoneNumber()
{
return "012345 678 910";
}
}
Działa to bardzo dobrze, w moim kontrolerze mogę dodać odniesienia do tej metody i przypisać ją do ViewBag
public ActionResult Contact()
{
ViewBag.Phone = MvcApplication.GetPhoneNumber();
}
Jak w wielu witrynach, numer telefonu będzie widoczny u góry każdej strony, dlatego umieszczenie go w _Layout.cshtml
logicznym miejscu jest logiczne.
Problem, który mam, to brak kontrolera (nie wiem, że) dla _Layout.cshtml, a jedynym sposobem na przekazanie wartości jest skonfigurowanie ViewBag.Phone dla każdego widoku, np.
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();
}
Jest bałaganiarski i śmierdzący, ale nie mam pojęcia, jak mogę to poprawić.
Czy powinienem przechowywać moje zmienne globalne w innym miejscu, czy jest to lepsze podejście, ponieważ jestem pewien, że jest to powszechny problem.
ConfigurationManager.AppSettings["MyKey"]
dokładnie w ten sam sposób.@System.Configuration.ConfigurationManager.AppSettings["myKey"]
Using System.Configuration;
deklaracji na górze plikuMożesz uzyskać dostęp do globalnych stałych bezpośrednio w pliku _Layout.cshtml:
Jednak przenosiłbym te stałe do osobnego pliku (zazwyczaj mam klasę statyczną Constants.cs), aby nie dodawać bałaganu do pliku global.asax.
Chciałbym też mieć je jako właściwości:
zamiast metod, aby można było uzyskać do nich dostęp w dowolnym miejscu:
Jeśli często się zmieniają, lepiej byłoby przechowywać te wartości w pliku konfiguracyjnym lub bazie danych, aby nie wymagało to ponownej kompilacji i wdrożenia, gdy trzeba je zmienić.
źródło
W Global.asax.cs
W _Layout.cshtml
źródło