MVC:如何让控制器呈现从视图启动的局部视图
MVC: How to get controller to render partial view initiated from the view
在我的 MVC5 项目中,我想在局部视图中创建一个菜单。这个菜单是动态的,因为它是根据我的数据库中的内容构建的。因此,我有一个控制器负责创建我的菜单并将菜单模型return设置为我的部分视图:
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.Partial("MenuPartial")
它不会调用控制器先用数据填充模型。我想要的是让控制器 return 部分。但我不知道如何从视图中做到这一点。在伪代码中,我想做类似的事情:
@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()
)。
现在在渲染局部视图之前调用控制器(并填充模型)。
在我的 MVC5 项目中,我想在局部视图中创建一个菜单。这个菜单是动态的,因为它是根据我的数据库中的内容构建的。因此,我有一个控制器负责创建我的菜单并将菜单模型return设置为我的部分视图:
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.Partial("MenuPartial")
它不会调用控制器先用数据填充模型。我想要的是让控制器 return 部分。但我不知道如何从视图中做到这一点。在伪代码中,我想做类似的事情:
@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()
)。
现在在渲染局部视图之前调用控制器(并填充模型)。