MVC:如何让控制器呈现从视图启动的局部视图

bri*_*nch 26 asp.net-mvc razor asp.net-mvc-5

在我的MVC5项目中,我想在局部视图中创建一个菜单.此菜单是动态的,因为它是根据我的数据库中的内容构建的.因此,我有一个控制器负责创建我的菜单并将菜单模型返回到我的局部视图:

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

   return PartialView("~/Views/Shared/MenuPartial", menuStructuredModel);
}
Run Code Online (Sandbox Code Playgroud)

在我称为MenuPartial的局部视图中,我想使用razor迭代我的菜单项,例如:

@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>
Run Code Online (Sandbox Code Playgroud)

现在问题是我插入局部视图的视图.如果在视图中我只是这样做:

@Html.Partial("MenuPartial")
Run Code Online (Sandbox Code Playgroud)

它不会调用控制器来首先使用数据填充模型.我想要的是让控制器返回部分.但我不知道如何从视图中做到这一点.在伪代码中我想做的事情如下:

@Html.RenderPartialFromController("/MyController/GetMenu")
Run Code Online (Sandbox Code Playgroud)

bri*_*nch 40

感谢Stephen Muecke和Erick Cortorreal,我得到了它的工作.

这是控制器应该是这样的:

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

   return PartialView("~/Views/Shared/MenuPartial", menuStructuredModel);
}
Run Code Online (Sandbox Code Playgroud)

它可能会被称为:

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

(因此在我的例子中GetMenu()声明HomeController).

现在,在呈现局部视图之前调用控制器(并填充模型).

  • 对我来说,指定局部视图时需要扩展名(.cshtml). (4认同)
  • 甚至你自己的回答都不是'接受'?:( (3认同)

Eri*_*eal 11

您应该使用:@ Html.RenderAction或@ Html.Action