1

私は.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 回設定されますが、特定のものにオーバーライドできる必要があります)
4

0 に答える 0