MVCサイト全体のグローバル定数値


11

My MVC(.NET)には、電話番号、物理アドレス、電子メールアドレスなど、サイト全体で一定の値があります。

この値を1回保存したいので、詳細を変更するときに将来の更新が簡単になります。

質問を簡単にするために、電話番号のみに注目しました。

私の質問は、この番号をどこにどのように保存するか、そして私が決定に直面している問題です。現時点では、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をすべてのビューに設定することです、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();
    }

これは面倒で臭いですが、どうすれば改善できるかわかりません。

グローバル変数を別の場所に保存する必要がありますか、これは一般的な問題であると確信しているため、これに対するより良いアプローチがありますか?

回答:


12

web.configに値を保存します。

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

次に、コードで次のように参照できます。

ConfigurationSettings.AppSettings["CompanyTelNo"];

ただし、これは実際には非推奨であるため、使用することをお勧めします。

ConfigurationManager.AppSettings["CompanyTelNo"]

_Layoutページからこの値にアクセスするにはどうすればよいですか?
デイブ

@ Richard-daltonが言ったことに似ています。クラスに実際の値がないことを除いて。これらの値が変更された場合、再コンパイルする必要があります。構成内にある場合は、IISで変更するだけです。
ジェームズ

1
ConfigurationSettingsは廃止さConfigurationManager.AppSettings["MyKey"]れたと思うので、まったく同じ方法で使用しました。
デイブ14年

1
注:私は使用する必要がありました@System.Configuration.ConfigurationManager.AppSettings["myKey"]
user1477388 14年

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 14

@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.