私はあなたと一緒です、Exitos:私も使用を避けViewBag
ます。ばかげた名前は別として、それに付随する弱いタイピングが嫌いです。解決策はありますが、ちょっと複雑なので、我慢してください。
まず、レイアウトに渡す「表示ヒント」を格納するクラスを作成します。私はこのクラスを独創的に「DisplayHints」と呼んでいます:
public class DisplayHints {
// anything that you want passed from a view to the layout goes here
public bool ShowBanner { get; set; }
}
WebViewPage<T>
次に、ビューの新しい基本クラスとなる派生クラスを作成します。という名前のプロパティがDisplayHints
格納されていることに注意してくださいViewData
(コントローラー、ビュー、およびレイアウトで使用できます)。
public abstract class MyViewPage<T> : WebViewPage<T> {
public DisplayHints DisplayHints {
get {
if( !ViewData.ContainsKey("DisplayHints") )
ViewData["DisplayHints"] = new DisplayHints();
return (DisplayHints)ViewData["DisplayHints"];
}
}
}
以下のコメンターが指摘したように、ViewData
は のように弱く型付けされていますViewBag
。ただし、/に何かを格納しないようにする方法はありません。これは、弱く型付けされた変数の数を 1 つに最小化するだけです。これが完了したら、強く型付けされた情報を必要なだけ格納できます。ViewData
ViewBag
DisplayHints
ビューの基本クラスができたので、 でWeb.config
、カスタム基本クラスを使用するように MVC に指示する必要があります。
<pages pageBaseType="MyNamespace.Views.MyViewPage">
大変な作業のように思えますが、このすべての作業でいくつかの重要な機能を得ることができます。ビューで、次のように必要な表示ヒントを設定できます。
@{ DisplayHints.ShowBanner = true; }
レイアウトでは、同じように簡単にアクセスできます。
@if( DisplayHints.ShowBanner ) {
<div>My banner....</div>
}
これが役立つことを願っています!