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")
Stephen MueckeとErick Cortorrealに感謝します。
これは、コントローラーの外観です。
_[ChildActionOnly]
public PartialViewResult GetMenu()
{
MenuStructuredModel menuStructuredModel = menuBusiness.GetStructuredMenu();
return PartialView("~/Views/Shared/MenuPartial", menuStructuredModel);
}
_
そして、それは次のように呼ばれます:
@Html.Action("GetMenu", "Home")
(したがって、GetMenu()
は私の例ではHomeController
で宣言されています)。
部分ビューがレンダリングされる前に、コントローラーが呼び出されます(そしてモデルが作成されます)。
使用する必要があります:@ Html.RenderActionまたは@ Html.Action