私は.Net MVC 4でかなり大きなアプリケーションに取り組んでいます。ここでは、領域をナビゲートするための1つのマスターメニューと、1つの領域のコンポーネントをナビゲートするための1つのサブメニューがあります。
明らかに、このサブメニューは領域ごとに異なります。現在、Viewbag を使用してこれを「解決」しています。
いくつかの抽象メソッドを持つ 1 つのマスター コントローラーがあります。
public abstract class BaseController: Controller
{
protected abstract string GetMenu();
protected override sealed void OnResultExecuting(ResultExecutingContext filterContext)
{
ViewBag.Menu = GetMenu();
base.OnResultExecuting(filterContext);
}
}
また、すべてのエリアには、次の宣言を持つベースコントローラーもあります
public abstract class Area1Controller: BaseController
{
protected string GetMenu()
{
return "MenuNameForArea1";
}
}
_Layout では、次のようにメニューにアクセスするだけです。
@{
var menu = ViewBag.Menu as string;
if (menu != null)
{
Html.RenderPartial(menu);
}
}
ここでの問題は、「_Layout ページに表示する必要があるが、領域ごとに異なるもの」のバッグに参加するかなりの変数があることです。
ですから、この問題に取り組むための最善の解決策は何だろうかと思います。_Layout ページの ViewModel を作成する必要がありますか? そのViewModelをViewBagに入れますか、それともすべてのビューモデルがベースビューモデルから継承するように強制しますか?
すべての領域に個別の _Viewstart があるため、セクションを使用してタイプ セーフな方法でこれに取り組むことを考えていましたが、残念ながら _Viewstart でセクションを定義できないようです。
提案は大歓迎です。
おまけの質問: 以下に対する適切な解決策は何ですか?
- 現在アクティブなエリアをメイン メニューに表示します (エリアごとに 1 回設定)
- サブメニューに現在アクティブなアイテムを表示します (コントローラーごとに 1 回設定されますが、特定のものにオーバーライドできる必要があります)