MVC: How to get controller to render partial view initiated from the view

放肆的年华 提交于 2019-12-20 16:31:39

问题


In my MVC5 project I want to create a menu in a partial view. This menu is dynamic in the sense that it is built from content in my database. Thus I have a controller taking care of creating my menu and returning the menu model to my partial view:

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

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

In my partial view called MenuPartial I want to use razor to iterate over my menu items, like:

@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>

Now the problem is the view in which I insert the partial view. If in the view I simply do:

@Html.Partial("MenuPartial")

It won't call the controller to populate the model with data first. What I want is to let the controller return the partial. But I don't know how to do this from the view. In pseudo code I would like to do something like:

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

回答1:


Thanks to Stephen Muecke and Erick Cortorreal I got it to work.

This is what the controller should look like:

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

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

And it may called like:

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

(Hence GetMenu() is declared in the HomeController in my example).

The controller is now called (and the model is populated) prior to the partial view is rendered.




回答2:


You should use: @Html.RenderAction Or @Html.Action



来源:https://stackoverflow.com/questions/29380011/mvc-how-to-get-controller-to-render-partial-view-initiated-from-the-view

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!