我有一個Mvc4 SPA項目我正在研究哪裏需要將多個視圖嵌套在一起的能力。視圖和視圖模型使用Durandal進行關聯。在Mvc4和Knockout中嵌套多個視圖 ViewModels
在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理念對我而言是比較新的。
病房感謝您的優秀和非常深入的答覆。我看到你的另一篇帖子使用UoW來引用TempHire。有興趣看到它,說實話,我仍然感覺哪些技術會起作用,所以我一定會密切關注它。我可能打算用這兩種方法來看看哪種最適合。 –