ダイナミックメニューを実装しようとしています。私はベースコントローラ(class PortalController : Controller
)を作成しました。このクラスにいくつかの仮想メソッドを追加しました。これらの方法の1つは、サイトメニューのhtmlを生成することです。これは、私が一度それを書いて、私が必要な場合はそれを上書きすることができます。問題は、ビューから直接メソッドを呼び出すことは悪い習慣です。ASP.NET MCVコントローラのすべてのアクションのビューバック値を設定する方法
このメソッドを使用して、メインメニューのhtmlを含むビューバック文字列を作成できます。ここで問題となっているのは、ビューを返す前にすべてのメソッドがこのgenerateMenu()メソッドを呼び出す必要があるということです。その解決策が、私はそれが好きではない。これをオブジェクトレベルで行うよりクリーンな方法がありますか?デフォルトでは、 "PortalController"を継承するすべてのオブジェクトは自動的にviewbag変数にメニュー文字列を持ちます。これどうやってするの?
これまでのところ私はこれを書いています。私が本当に好きなのは、ほぼコンストラクタに相当します。メニューは、オブジェクトが構築されたときに生成されます。以下のメソッドを使用すると、ビューが呼び出されたときにのみメニューがレンダリングされます。私は、コントローラ内の複数のアクションがメニュー内の異なる項目を持つ能力が必要です。
protected override ViewResult View(IView view, object model)
{
ViewBag.Menu = this.GenerateMenu();
return base.View(view, model);
}