8

.cshtml Razor ファイル内のプロジェクト プロパティにアクセスすることは可能ですか? 私はこのようなものが必要です:

@if (myProject.Properties.Settings.Default.foo) {...}

一方、foo はboolean

セキュリティ上の理由からできないというエラーが表示されます。

4

2 に答える 2

11

ConfigurationManagerビューから直接呼び出すべきではありません。ビューは MVC では「ダム」である必要があります。つまり、データ構造やバックエンドの知識がなく、ConfigurationManager直接呼び出すことで、ビューは設定がどのように保存されているかを知りすぎます。別のストア (データベースなど) を使用するように設定を変更した場合は、ビューを変更する必要があります。

したがって、その値を他の場所で取得してビューに渡す必要があるため、ビューはそれをレンダリングするだけです。おそらく 2 つのオプションがあります。

  1. ViewBag に何かを追加し、ビューでそれをつかみます
  2. 厳密に型指定された ViewModel を部分ビューに渡す共通コントローラーからアクションをレンダリングします。

私はオプション 1 を思いとどまらせます。なぜなら、ViewBagそれは強く型付けされていないためです ( Is using ViewBag in MVC bad? )。また、これを行うには、苦労する可能性のあるすべてのコントローラーから継承するか、そこに何かをオーバーライドして詰め込むBaseControllerグローバル アクション フィルターを作成する必要があります。ActionExecutedViewBag

オプション 2 の方がおそらく優れています。次のような一般的なコントローラーを作成します。

public class CommonController : Controller
{
    [ChildActionOnly]
    public ViewResult Settings()
    {
        // Get some config settings etc here and make a view model
        var model = new SettingsModel { Foo = myProject.Properties.Settings.Default.foo };

        return View(model);
    }
}

次に、レイアウト ファイルで以下を呼び出すことができます。

@Html.Action("Settings", new { controller = "Common" })

次のような厳密に型指定された部分ビュー (~/Views/Common/Settings.cshtml) をレンダリングします。

@model YourProject.Models.SettingsModel

@if(Model.Foo)
{
    // So something
}

そうすれば、強く型付けされたモデルとビューを引き続き使用できます。レイアウト ビューはクリーンでシンプルなままで、部分ビューは「ダム」のままです。

于 2013-04-16T11:55:49.183 に答える
0

アプリの設定は web.config ファイルに次のように保存されます。

<applicationSettings>
 <YourProject.Properties.Settings>
  <setting name="Setting" serializeAs="String">
    <value>asdqwe</value>
  </setting>

したがって、次のように ConfigurationManager.AppSettings 辞書を使用してみることができます

ConfigurationManager.AppSettings["Setting"]
于 2013-04-16T10:36:29.327 に答える