将ViewModel传递给Layout.cshtml中的部分视图调用

时间:2017-11-08 10:05:16

标签: c# asp.net-mvc razor

背景

我正在尝试在我正在处理的MVC应用程序上使用仪表板模板。

WebArch Template

我不确定如何将ViewModel传递到我称为Header的顶栏。

CODE

在我的_Layout.cshtml中,我将HTML拆分为:

<body class="">
  @Html.Partial("_Header")

  <div class="page-container row-fluid">
    @Html.Partial("_Sidebar")

    <div class="page-content">
      <div class="content">
        @RenderBody()
      </div>
    </div>
  </div>
</body>

我猜这是错的,因为现在我无法将ViewModel传递给标题部分,或者如果我可以,我们不应该这样做?

分裂这个的正确方法是什么?

1 个答案:

答案 0 :(得分:4)

而不是@Html.Partial(),使用@Html.Action()@{ Html.RenderAction(); }来调用[ChildActionOnly]控制器方法来初始化仪表板的模型并返回部分视图,例如

[ChildActionOnly]
public PartialViewResult Header()
{
    // initialize a model
    return PartialView("_Header", model)
}

并在布局中

@{ Html.RenderAction("Header", yourControllerName); }

另一种方法是,您在使用该布局的每个视图中使用的模型需要一个属性,该属性是用于生成仪表板然后使用@Html.Partial("_Header", Model.yourDashBoardProperty)

的模型