.cshtml Razor ファイル内のプロジェクト プロパティにアクセスすることは可能ですか? 私はこのようなものが必要です:
@if (myProject.Properties.Settings.Default.foo) {...}
一方、foo はboolean
セキュリティ上の理由からできないというエラーが表示されます。
.cshtml Razor ファイル内のプロジェクト プロパティにアクセスすることは可能ですか? 私はこのようなものが必要です:
@if (myProject.Properties.Settings.Default.foo) {...}
一方、foo はboolean
セキュリティ上の理由からできないというエラーが表示されます。
ConfigurationManager
ビューから直接呼び出すべきではありません。ビューは MVC では「ダム」である必要があります。つまり、データ構造やバックエンドの知識がなく、ConfigurationManager
直接呼び出すことで、ビューは設定がどのように保存されているかを知りすぎます。別のストア (データベースなど) を使用するように設定を変更した場合は、ビューを変更する必要があります。
したがって、その値を他の場所で取得してビューに渡す必要があるため、ビューはそれをレンダリングするだけです。おそらく 2 つのオプションがあります。
私はオプション 1 を思いとどまらせます。なぜなら、ViewBag
それは強く型付けされていないためです ( Is using ViewBag in MVC bad? )。また、これを行うには、苦労する可能性のあるすべてのコントローラーから継承するか、そこに何かをオーバーライドして詰め込むBaseController
グローバル アクション フィルターを作成する必要があります。ActionExecuted
ViewBag
オプション 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
}
そうすれば、強く型付けされたモデルとビューを引き続き使用できます。レイアウト ビューはクリーンでシンプルなままで、部分ビューは「ダム」のままです。
アプリの設定は web.config ファイルに次のように保存されます。
<applicationSettings>
<YourProject.Properties.Settings>
<setting name="Setting" serializeAs="String">
<value>asdqwe</value>
</setting>
したがって、次のように ConfigurationManager.AppSettings 辞書を使用してみることができます
ConfigurationManager.AppSettings["Setting"]