23

ビュー内の静的クラスから静的変数を使用できないのはなぜですか?

たとえば、設定クラスがあるとしましょう:

public static class GlobalVariables
{
    public static string SystemColor
    {
        get { return Properties.Settings.Default.SystemColor; }
    }
}

ビューでそれを呼び出すことができないのはなぜですか?

そのようです

@using AppName.Models
<html>
<div ><h1 style="color:@GlobalVariables.SystemColor">System Color</h1></div>
</html>
4

3 に答える 3

18

私の知る限り、適切なステートメントでクラスの名前空間を含めると、ASP.NET MVC のビュー内から静的変数にアクセスできます。using

@using WhateverNamespaceGlobalVariablesIsIn

さらに重要なことは、ビューから静的変数に直接アクセスしてはならないということです。MVC パターンに沿って、ビューのすべてのデータにビュー モデルでアクセスできる必要があります。

public ActionResult MyAction()
{
    var model = new MyViewModel();
    model.SystemColor = GlobalVariables.SystemColor;
    ...
    return View(model);
}

意見:

@model MyViewModel

<div>
    <h1 style="color:@(Model.SystemColor)">System Color</h1>
</div>

レイアウト ファイルでこれを行う必要がある場合は、 を使用RenderActionしてコントローラー アクションを呼び出し、代わりに部分ビューを返すことができます。次に、パーシャルを to と入力してMyViewModel、上記のように使用できます。

于 2013-06-24T09:14:40.137 に答える
5

ビューで静的変数にアクセスできます。これには、次の 3 つの方法があります。

1) Ant P が示唆するように、ビューに using ステートメントを含めます。GlobalVariablesクラスの名前空間が次の場合AppName.GlobalVariables:

@using AppName.GlobalVariables
<html>
    <div ><h1 style="color:@GlobalVariables.SystemColor">System Color</h1></div>
</html>

2) 別の方法は、変数にアクセスする行で名前空間を直接使用することです。

<div ><h1 style="color:@AppName.GlobalVariables.SystemColor">System Color</h1></div>

3) 最後に、必要な名前空間を Views フォルダーの下の web.config ファイルに追加できます。

<system.web.webPages.razor>
  <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <namespaces>
      <add namespace="System.Web.Mvc" />
      <add namespace="System.Web.Mvc.Ajax" />
      <add namespace="System.Web.Mvc.Html" />
      <add namespace="System.Web.Routing" />
      <add namespace="System.Web.Optimization" />
      <add namespace="AppName.GlobalVariables" />
    </namespaces>
  </pages>
</system.web.webPages.razor>

モデルに変数を貼り付けてそこからビューに渡すことに関しては...実際、MVCパターンに準拠し、懸念の分離とそのすべての利点を保証します。しかし、私の意見では、場合によっては「パターンに固執する」ことはばかげたレベルになります。あなたの場合、ビューからこの変数にアクセスするだけです。

于 2013-06-24T09:42:49.890 に答える