Mi MVC (.NET) tiene algunos valores constantes en todo el sitio, como el número de teléfono, la dirección física, la dirección de correo electrónico, etc.
Me gustaría almacenar este valor una vez, para que las futuras actualizaciones sean más fáciles cuando cambien sus detalles.
Para simplificar mi pregunta, solo me he centrado en el número de teléfono.
Mi pregunta es dónde y cómo almacenar este número y un problema que enfrento con mi decisión. Por el momento, he elegido almacenarlo en el archivo Global.asax como un método estático, por ejemplo
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
//logic
}
public static string GetPhoneNumber()
{
return "012345 678 910";
}
}
Esto funciona muy bien, en mi controlador puedo agregar referencias a este método y asignarlo a una ViewBag
public ActionResult Contact()
{
ViewBag.Phone = MvcApplication.GetPhoneNumber();
}
Según muchos sitios, el número de teléfono será visible en la parte superior de cada página y, como tal, colocarlo en el _Layout.cshtml
es lógico.
El problema que tengo es que no hay un controlador (no lo sé) para _Layout.cshtml y la única forma en que puedo pasar el valor es tener un ViewBag.Phone configurado para cada vista, 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();
}
Esto es desordenado y maloliente, pero no tengo idea de cómo puedo mejorar esto.
¿Debería almacenar mis variables globales en un lugar diferente o hay un mejor enfoque para esto, ya que estoy seguro de que este es un problema común?
ConfigurationManager.AppSettings["MyKey"]
exactamente de la misma manera.@System.Configuration.ConfigurationManager.AppSettings["myKey"]
Using System.Configuration;
declaración en la parte superior de su archivoPuede acceder a las constantes globales directamente en su archivo _Layout.cshtml:
Sin embargo, movería estas constantes a un archivo separado (generalmente tengo una clase estática Constants.cs) para no agregar desorden al archivo global.asax.
Además, los tendría como propiedades:
en lugar de métodos para poder acceder a ellos desde cualquier lugar así:
Si es probable que cambien a menudo, sería mejor tener estos valores almacenados en un archivo de configuración o en una base de datos, por lo que no es necesario volver a compilarlos ni implementarlos cuando sea necesario cambiarlos.
fuente
En Global.asax.cs
En _Layout.cshtml
fuente