【问题标题】:MVC: How to get controller to render partial view initiated from the viewMVC:如何让控制器渲染从视图启动的部分视图
【发布时间】:2015-06-05 11:07:44
【问题描述】:

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

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")

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

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

【问题讨论】:

  • [ChildActionOnly]装饰你的GetMenu()方法,然后在视图中使用@Html.Action("GetMenu", "MyController")
  • 非常感谢。它有效:-)
  • @StephenMuecke 您的评论必须是可接受的答案!

标签: asp.net-mvc razor asp.net-mvc-5


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    多亏了 Stephen Muecke 和 Erick Cortorreal,我才得以成功。

    控制器应该是这样的:

    [ChildActionOnly]
    public PartialViewResult GetMenu()
    {
       MenuStructuredModel menuStructuredModel = menuBusiness.GetStructuredMenu();
    
       return PartialView("~/Views/Shared/MenuPartial", menuStructuredModel);
    }
    

    它可能会这样称呼:

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

    (因此在我的示例中,GetMenu() 是在 HomeController 中声明的)。

    现在在渲染局部视图之前调用控制器(并填充模型)。

    【讨论】:

    • 甚至您自己的答案都不是“接受”? :(
    • 对我来说,指定局部视图时需要扩展名(.cshtml)。
    猜你喜欢
    • 2017-04-14
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2015-04-04
    • 1970-01-01
    相关资源
    最近更新 更多