Meu MVC (.NET) possui valores constantes em todo o site, como número de telefone, endereço físico, endereço de email etc.
Gostaria de armazenar esse valor uma vez, para que futuras atualizações sejam mais fáceis quando eles mudarem seus detalhes.
Para simplificar minha pergunta, concentrei-me apenas no número de telefone.
Minha pergunta é onde e como armazenar esse número e um problema que estou enfrentando com minha decisão. No momento, eu escolhi armazená-lo no arquivo Global.asax como um método estático, por exemplo,
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
//logic
}
public static string GetPhoneNumber()
{
return "012345 678 910";
}
}
Isso funciona muito bem, no meu controlador eu posso adicionar referências a este método e atribuí-lo a um ViewBag
public ActionResult Contact()
{
ViewBag.Phone = MvcApplication.GetPhoneNumber();
}
De acordo com muitos sites, o número de telefone estará visível na parte superior de todas as páginas e, como tal, colocá-lo no _Layout.cshtml
é lógico.
O problema que tenho é que não há um controlador (não que eu saiba) para o _Layout.cshtml e a única maneira de passar o valor é ter um ViewBag.Phone configurado para todas as visualizações, por exemplo
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();
}
Isso é confuso e fedorento, mas não tenho idéia de como posso melhorar isso.
Devo armazenar minhas variáveis globais em um local diferente ou há uma abordagem melhor para isso, pois tenho certeza de que esse é um problema comum.
ConfigurationManager.AppSettings["MyKey"]
exatamente da mesma maneira.@System.Configuration.ConfigurationManager.AppSettings["myKey"]
Using System.Configuration;
declaração na parte superior do seu arquivoVocê pode acessar constantes globais diretamente no seu arquivo _Layout.cshtml:
No entanto, eu moveria essas constantes para um arquivo separado (geralmente tenho uma classe estática Constants.cs) para não adicionar confusão ao arquivo global.asax.
Além disso, eu os teria como propriedades:
em vez de métodos, para que eles possam ser acessados em qualquer lugar como:
Se é provável que eles mudem com frequência, seria melhor ter esses valores armazenados em um arquivo de configuração ou banco de dados, para que não exija uma recompilação e implantação quando eles precisarem ser alterados.
fonte
Em Global.asax.cs
Em _Layout.cshtml
fonte