MVC (.NET) saya memiliki beberapa nilai konstan di seluruh situs, seperti nomor telepon, alamat fisik, alamat email, dll.
Saya ingin menyimpan nilai ini sekali, sehingga pembaruan di masa mendatang lebih mudah ketika mereka mengubah detailnya.
Untuk membuat pertanyaan saya lebih sederhana, saya hanya fokus pada nomor telepon.
Pertanyaan saya adalah di mana dan bagaimana menyimpan nomor ini dan masalah yang saya hadapi dengan keputusan saya. Saat ini, saya memilih untuk menyimpannya di file Global.asax sebagai metode statis, misalnya
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
//logic
}
public static string GetPhoneNumber()
{
return "012345 678 910";
}
}
Ini bekerja dengan sangat baik, di controller saya, saya dapat menambahkan referensi ke metode ini dan menetapkannya ke ViewBag
public ActionResult Contact()
{
ViewBag.Phone = MvcApplication.GetPhoneNumber();
}
Seperti banyak situs, nomor telepon akan terlihat di bagian atas setiap halaman dan dengan demikian, menempatkannya di _Layout.cshtml
adalah logis.
Masalah yang saya miliki adalah tidak ada controller (bukan yang saya tahu) untuk _Layout.cshtml dan satu-satunya cara saya dapat melewati nilainya adalah dengan memiliki ViewBag. Telepon diatur untuk setiap tampilan, 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();
}
Ini berantakan dan bau tetapi saya tidak tahu bagaimana saya bisa meningkatkan ini.
Haruskah saya menyimpan variabel global saya di tempat yang berbeda atau apakah ada pendekatan yang lebih baik untuk ini karena saya yakin ini adalah masalah umum.
ConfigurationManager.AppSettings["MyKey"]
cara yang sama persis.@System.Configuration.ConfigurationManager.AppSettings["myKey"]
Using System.Configuration;
deklarasi di bagian atas file AndaAnda dapat mengakses konstanta global secara langsung di file _Layout.cshtml Anda:
Namun, saya akan memindahkan konstanta ini ke file yang terpisah (saya biasanya memiliki kelas statis Constants.cs) agar tidak menambah kekacauan pada file global.asax.
Juga, saya akan menjadikannya sebagai properti:
daripada metode sehingga mereka dapat diakses di mana saja seperti:
Jika mereka cenderung berubah sering akan lebih baik untuk memiliki nilai-nilai ini disimpan dalam file konfigurasi atau database sehingga tidak memerlukan kompilasi ulang dan penyebaran ketika mereka perlu diubah.
sumber
Di Global.asax.cs
Di _Layout.cshtml
sumber