web-dev-qa-db-ja.com

MVC:ビューから開始された部分ビューをレンダリングするコントローラーを取得する方法

MVC5プロジェクトでは、部分ビューでメニューを作成します。このメニューは、データベースのコンテンツから構築されるという意味で動的です。したがって、メニューを作成し、メニューモデルを部分ビューに戻すコントローラーがあります。

public PartialViewResult GetMenu()
{
   MenuStructuredModel menuStructuredModel = menuBusiness.GetStructuredMenu();

   return PartialView("~/Views/Shared/MenuPartial", menuStructuredModel);
}

MenuPartialという名前の部分ビューで、次のように、かみそりを使用してメニュー項目を繰り返したい

@model MyApp.Models.Menu.MenuStructuredModel

<div class="list-group panel">
    @foreach (var category in Model.ViewTypes[0].Categories)
    {
        <a href="#" class="list-group-item lg-green" data-parent="#MainMenu">@category.ShownName</a>
    }
</div>

ここで問題は、部分ビューを挿入するビューです。ビューで私が単にする場合:

@Html.Partial("MenuPartial")

最初にモデルにデータを入力するためにコントローラーを呼び出すことはありません。私が欲しいのは、コントローラーがパーシャルを返すようにすることです。しかし、私はビューからこれを行う方法がわかりません。擬似コードでは、次のようなことをしたいと思います。

@Html.RenderPartialFromController("/MyController/GetMenu")
26
brinch

Stephen MueckeとErick Cortorrealに感謝します。

これは、コントローラーの外観です。

_[ChildActionOnly]
public PartialViewResult GetMenu()
{
   MenuStructuredModel menuStructuredModel = menuBusiness.GetStructuredMenu();

   return PartialView("~/Views/Shared/MenuPartial", menuStructuredModel);
}
_

そして、それは次のように呼ばれます:

@Html.Action("GetMenu", "Home")

(したがって、GetMenu()は私の例ではHomeControllerで宣言されています)。

部分ビューがレンダリングされる前に、コントローラーが呼び出されます(そしてモデルが作成されます)。

40
brinch

使用する必要があります:@ Html.RenderActionまたは@ Html.Action

11