Design patterns 嵌套多个视图\Mvc4和敲除中的视图模型
我有一个Mvc4水疗项目,我需要有能力有多个视图嵌套在彼此的工作。视图和视图模型使用Durandal链接 在Mvc3中,我以前是通过在视图中的部分视图中使用部分视图,并将参数向下传递给各个部分来实现这一点的。通过这样做,我能够在一对多关系上有多个部分,而这些部分又显示了一对多关系,所有这些关系都链接回父视图 以前在Mvc3中使用的示例=Design patterns 嵌套多个视图\Mvc4和敲除中的视图模型,design-patterns,breeze,single-page-application,durandal,hottowel,Design Patterns,Breeze,Single Page Application,Durandal,Hottowel,我有一个Mvc4水疗项目,我需要有能力有多个视图嵌套在彼此的工作。视图和视图模型使用Durandal链接 在Mvc3中,我以前是通过在视图中的部分视图中使用部分视图,并将参数向下传递给各个部分来实现这一点的。通过这样做,我能够在一对多关系上有多个部分,而这些部分又显示了一对多关系,所有这些关系都链接回父视图 以前在Mvc3中使用的示例= Public class ParentsController { public ActionResult Parent(int id) { Parent
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从父视图模型中相对轻松地加载子视图和显示子视图,但是当我进入grand Children时,感觉就像我进入了“意大利面条”代码,从一个视图模型中加载了太多。我认为正确的做法是为父母、孩子和孙子创建一个视图模型,将他们分开并使他们可重用
我的问题是,父视图模型应该先加载子视图模型,然后让子视图模型加载孙子视图模型,还是应该有一个视图从单独的父视图到子视图再到孙子视图进行组合和级联?Ie一个视图应该分别加载三个视图模型,还是应该有一个专用的父视图模型调用所有三个视图模型并加载它们,并且或多或少地相互独立?我在这里寻找最佳实践,因为SPA理念对我来说相对较新。现在宣布最佳实践还为时过早。。。尤其是当应用程序的实际工作流和性能特征未知时(此时可能未知) 一般来说,我们认为最好是每个VM加载它所需的内容,而不是依赖主VM来提供从属VM。这里的直觉是,您将其分解为单独的虚拟机,以便它们可以执行自己的职责。。。所以让他们去做吧。主虚拟机成为其子虚拟机的协调器,并尽可能远离其实现细节 我们打算在下个月左右发布一个名为“TempHire”的新样本,该样本以“热毛巾(ette)”为基础,可能会提供一些指导。这个时机可能不适合你。但你可以找到答案),我将总结(并过于简化)与你的问题相关的样本特征:
你需要多少?我不知道。现在宣布最佳实践有点早。。。尤其是当应用程序的实际工作流和性能特征未知时(此时可能未知) 一般来说,我们认为最好是每个VM加载它所需的内容,而不是依赖主VM来提供从属VM。这里的直觉是,您将其分解为单独的虚拟机,以便它们可以执行自己的职责。。。所以让他们去做吧。主虚拟机成为其子虚拟机的协调器,并尽可能远离其实现细节 我们打算发布一个名为“TempHire”的新样本,该样本源于“热毛巾(ette)”