我有一个正在处理的 Mvc4 SPA 项目,我需要能够将多个视图相互嵌套。视图和视图模型使用 Durandal 链接起来。
在 Mvc3 中,我以前通过在视图中的局部视图中使用局部视图并将参数向下传递给局部视图来完成此操作。这样做我能够在一对多关系上有多个部分,而这些部分又显示了多个部分显示一对多关系,所有这些都链接回父视图。
先前在 Mvc3 中使用的示例 =
Public class ParentsController
{
public ActionResult Parent(int id)
{
Parent parent = Db.Parents.Find(id);
ViewBag.ParentId = parent.Id;
return View(parent)
}
public PartialViewResult Child(int id)
{
Child childs = Db.Childs.Where(w => w.ParentId = id);
return PartialView("ChildPartial", childs.ToList());
}
public PartialViewResult GrandChild(int id)
{
GrandChild grandChilds = Db.GrandChilds.Where(w => w.ChildId = id);
return PartialView("GrandChildPartial", grandChilds.ToList());
}
}
并查看类似
Parent.cshtml
@{
ViewBag.Title = "Parent";
}
@Html.DisplayFor(Model.ParentName)
@{Html.RenderAction("ChildPartial", new { id = ViewBag.ParentId});}
ChildPartial.cshtml
@{
ViewBag.Title = "Children";
}
{ foreach (var child in childs)
{
@{Html.DisplayFor(child.ChildsName)}
@{Html.RenderAction("GrandChildPartial", new { id = ViewBag.ChildId});}
}}
GrandChildPartial.cshtml
@{
ViewBag.Title = "Grand Children";
}
{ foreach (var grandChild in GrandChilds)
{
@{Html.DisplayFor(grandChild.GrandChildsName)}
}}
同样,上面是我过去使用的模式的一个简短示例,不需要帮助。
我可以使用 Breeze 从父视图模型中相对容易地加载子项和显示子项,但是当我进入大子项时,感觉就像我正在进入“意大利面条”代码并从一个视图模型加载太多。我在想正确的做法是为父母、孩子和孙子创建一个视图模型,将它们分开并使其可重用。
我的问题是父视图模型应该加载孩子的视图模型,然后让孩子的视图模型加载孙子的视图模型,还是应该有一个视图从单独的父级到子级到孙子级组成和级联?即一个视图应该分别加载3个视图模型还是应该有一个专用的父视图模型调用所有三个视图模型并或多或少地相互独立地加载它们?我在这里寻找最佳实践,因为 SPA 的想法对我来说相对较新。