Мой MVC (.NET) имеет некоторые постоянные значения по всему сайту, такие как номер телефона, физический адрес, адрес электронной почты и т. Д.
Я хотел бы сохранить это значение один раз, поэтому будущие обновления будут проще, когда они изменят свои данные.
Чтобы сделать мой вопрос проще, я сосредоточился только на номере телефона.
У меня вопрос, где и как хранить этот номер, и проблема, с которой я сталкиваюсь в своем решении. На данный момент я решил сохранить его в файле Global.asax как статический метод, например
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
//logic
}
public static string GetPhoneNumber()
{
return "012345 678 910";
}
}
Это работает очень хорошо, в моем контроллере я могу добавить ссылки на этот метод и назначить его ViewBag
public ActionResult Contact()
{
ViewBag.Phone = MvcApplication.GetPhoneNumber();
}
Как и на многих сайтах, телефонный номер будет отображаться в верхней части каждой страницы, поэтому размещение его в _Layout.cshtml
логическом порядке.
У меня проблема в том, что для _Layout.cshtml нет контроллера (не то, что я знаю), и единственный способ передать это значение - настроить ViewBag.Phone для каждого представления, например
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();
}
Это грязно и вонючий, но я понятия не имею, как я могу улучшить это.
Должен ли я хранить свои глобальные переменные в другом месте или есть лучший подход для этого, так как я уверен, что это общая проблема.
ConfigurationManager.AppSettings["MyKey"]
точно так же.@System.Configuration.ConfigurationManager.AppSettings["myKey"]
Using System.Configuration;
объявления вверху файлаВы можете получить доступ к глобальным константам прямо в вашем файле _Layout.cshtml:
Однако я бы переместил эти константы в отдельный файл (обычно у меня есть статический класс Constants.cs), чтобы не добавлять беспорядок в файл global.asax.
Кроме того, я хотел бы иметь их как свойства:
а не методы, чтобы они могли быть доступны в любом месте, например, так:
Если они могут часто меняться, было бы лучше сохранить эти значения в файле конфигурации или базе данных, чтобы не требовалось перекомпиляции и развертывания, когда их необходимо изменить.
источник
В Global.asax.cs
В _Layout.cshtml
источник