在单个视图中组织多个ASP .Net MVC View模型的最佳方式是什么?

时间:2017-06-02 13:52:46

标签: asp.net-mvc

我的应用程序有一个主仪表板,由8个不同的局部视图组成;每个都由他们自己的视图模型支持,在我的控制器中我只是调用

public ActionResult mainDashboard(){
 return View()
}

返回信息中心。我的问题是,是否建议创建一个仪表板视图模型,该模型还包含对部分视图的视图模型的引用?在这种情况下,什么被认为是推荐的最佳做法?

1 个答案:

答案 0 :(得分:3)

Ohkk使用html.Action代替html.partial

也是一个好主意

这看起来更像是这样:

public ActionResult Dashboard()
{
    return View();
}

public PartialViewResult Clubs()
{
   ....
    return PartialView(db.Clubs.ToList());//this assumes the partial view is named Clubs.cshtml, otherwise you'll need to use the overload where you pass the view name
}

public PartialViewResult Alerts()
{
   ....
    return PartialView(db.Alerts.ToList());
}

Dashboard.cshtml

<div class="dashboard_alerts">    
  @Html.Action("Alerts")

<div class="dashboard_pending_clubs">    
   @Html.Action("Clubs")
</div>

<div class="dashboard_verified_members">    
   @Html.Action("Members")
 </div>

您需要创建一个特定于Dashboard页面的ViewModel,这将是更有效的方式

public class DashboardViewModel
{
  public IEnumerable<GMC.Models.Clubs> Clubs { get; set; }
  public IEnumerable<GMC.Models.MemberUsers> Users  { get; set; }
  public IEnumerable<GMC.Models.Alerts> Alerts  { get; set; }
}

然后,在Dashboard操作方法中,您将填充每个列表:

myModel.Users = db.MemberUsers.ToList();

... 然后,您需要更新视图以接受这个新的ViewModel

 @model DashboardViewModel

最后,在视图中,您需要将数据传递给每个部分:

@Html.Partial("DashboardAlerts", Model.Alerts)

@Html.Partial("DashboardClubs", Model.Clubs)