MVC 사이트 전체의 글로벌 상수 값


11

내 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에 대한 컨트롤러가 없다는 것입니다 (알지 못합니다). 값을 전달할 수있는 유일한 방법은 모든보기, EG에 대해 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();
    }

이것은 지저분하고 냄새가 있지만 어떻게 이것을 개선 할 수 있는지 전혀 모른다.

전역 변수를 다른 장소에 저장해야하거나 이것이 일반적인 문제라고 확신하기 때문에 더 나은 접근 방법이 있습니까?

답변:


12

web.config에 값을 저장하십시오.

<appSettings>
  <add key="CompanyTelNo" value="012345 678 910" />
</appSettings>

그런 다음 코드에서 다음을 참조하여 참조 할 수 있습니다.

ConfigurationSettings.AppSettings["CompanyTelNo"];

그러나 실제로는 더 이상 사용되지 않으므로 다음을 사용하는 것이 좋습니다.

ConfigurationManager.AppSettings["CompanyTelNo"]

_Layout 페이지에서이 값에 어떻게 액세스합니까?
Dave

@ Richard-dalton이 위에서 말한 것과 유사합니다. 클래스에 실제 값이없는 것을 제외하고. 해당 값이 변경되면 다시 컴파일해야합니다. 그것들이 설정되어 있다면 IIS에서 변경하면됩니다.
James

1
ConfigurationSettings는 더 이상 사용되지 않으며 ConfigurationManager.AppSettings["MyKey"]동일한 방식으로 사용됩니다.
Dave

1
참고 : 사용해야했다@System.Configuration.ConfigurationManager.AppSettings["myKey"]
user1477388

1
Using System.Configuration;파일 맨 위에 선언 이 없다는 점을 제외하고 @DaveRook와 동일
James

6

_Layout.cshtml 파일에서 직접 전역 상수에 액세스 할 수 있습니다.

<div class="phone">@MvcApplication.GetPhoneNumber()</div>

그러나 global.asax 파일에 혼란을 일으키지 않도록 이러한 상수를 별도의 파일 (일반적으로 Constants.cs 정적 클래스가 있음)로 옮길 것입니다.

또한 속성으로 사용합니다.

public static string PhoneNumber
{
    get { return "012345 678 910"; }
}

메소드가 아닌 다음과 같이 어디서나 액세스 할 수 있습니다.

Constants.PhoneNumber

값이 자주 변경 될 가능성이 높으면 이러한 값을 구성 파일이나 데이터베이스에 저장하는 것이 좋으므로 변경해야 할 때 재 컴파일 및 배포가 필요하지 않습니다.


2
그는 또한 간단한 .resx 파일을 사용할 수 있습니다 :)
Knerd

@MvcApplication은 뷰 파일에서 인식되지 않습니다 ...
thedrs

1

Global.asax.cs에서

public class MvcApplication : System.Web.HttpApplication
{
  ...
  public const string PhoneNumber = "01234 567890";
  ...
}

_Layout.cshtml에서

<div>Phone number: @MvcApplication.PhoneNumber</div>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.