Asp.net mvc MVC:如何让控制器渲染从视图启动的部分视图
在我的MVC5项目中,我想在局部视图中创建一个菜单。此菜单是动态的,因为它是根据数据库中的内容构建的。因此,我有一个控制器负责创建菜单并将菜单模型返回到局部视图:Asp.net mvc MVC:如何让控制器渲染从视图启动的部分视图,asp.net-mvc,razor,asp.net-mvc-5,Asp.net Mvc,Razor,Asp.net Mvc 5,在我的MVC5项目中,我想在局部视图中创建一个菜单。此菜单是动态的,因为它是根据数据库中的内容构建的。因此,我有一个控制器负责创建菜单并将菜单模型返回到局部视图: public PartialViewResult GetMenu() { MenuStructuredModel menuStructuredModel = menuBusiness.GetStructuredMenu(); return PartialView("~/Views/Shared/MenuPartial",
public PartialViewResult GetMenu()
{
MenuStructuredModel menuStructuredModel = menuBusiness.GetStructuredMenu();
return PartialView("~/Views/Shared/MenuPartial", menuStructuredModel);
}
在名为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>
它不会首先调用控制器来用数据填充模型。我想要的是让控制器返回部分。但我不知道从这个角度看该怎么做。在伪代码中,我希望执行以下操作:
@Html.RenderPartialFromController("/MyController/GetMenu")
你应该使用:
@Html.RenderAction
或@Html.Action
多亏了Stephen Muecke和Erick Cortorreal,我让它开始工作了
这就是控制器的外观:
[ChildActionOnly]
public PartialViewResult GetMenu()
{
MenuStructuredModel menuStructuredModel = menuBusiness.GetStructuredMenu();
return PartialView("~/Views/Shared/MenuPartial", menuStructuredModel);
}
它可能被称为:
@Html.Action(“GetMenu”、“Home”)
(因此在我的示例中,HomeController
中声明了GetMenu()
)
现在在渲染部分视图之前调用控制器(并填充模型)。使用
[ChildActionOnly]
装饰您的GetMenu()
方法,然后在视图中使用@Html.Action(“GetMenu”,“MyController”)
非常感谢。它是有效的:-)@StephenMuecke你的评论一定是公认的答案!甚至连你自己的回答都不被接受(对我来说,指定局部视图时需要扩展(.cshtml)。
[ChildActionOnly]
public PartialViewResult GetMenu()
{
MenuStructuredModel menuStructuredModel = menuBusiness.GetStructuredMenu();
return PartialView("~/Views/Shared/MenuPartial", menuStructuredModel);
}