我不明白爲什麼我找不到清楚解釋如何使用MVC執行此操作的任何內容。似乎是一個非常常規的問題:將來自多個表的自定義視圖模型數據合併到視圖中
我有三個表:
PackageName: PackageNameID,PackageName
Food: FoodID,Food
PackageContent: PackageContentID, PackageNameID, FoodID, Qty
的應用程序應該來形容食品袋。例如,名爲「A」的包裝可能包含4個洋蔥和3個辣椒。另一個包裝,「B」,可能包含2卷和2洋蔥。
目前我有收集數據的自定義視圖模式(「PackageNameModel」):
public ViewResult Index() {
var viewModel =
from pn in db.PackageNames
from pc in db.PackageContents
.Where(p => p.PackageNameID == pn.PackageNameID).DefaultIfEmpty()
from f in db.Foods
.Where(f => f.FoodID == pc.FoodID).DefaultIfEmpty()
select new PackageFoodModel { PackageName = pn, PackageContent = pc, Food = f };
return View(viewModel);
}
這正確返回數據,但我該怎麼辦吧,這樣的觀點實際上是一個是對應用程序有用嗎?
在我看來,使用此:
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.PackageName.PackageName1) ,
@Html.DisplayFor(modelItem => item.Food.Food1)[email protected](modelItem => item.PackageContent.Qty)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.PackageName.PackageNameID }) |
@Html.ActionLink("Details", "Details", new { id = item.PackageName.PackageNameID }) |
@Html.ActionLink("Delete", "Delete", new { id = item.PackageName.PackageNameID })
</td>
</tr>
}
我能夠顯示以下內容:
- A , Onions=4 Edit | Details | Delete
- A , Peppers=3 Edit | Details | Delete
- B , Rolls=2 Edit | Details | Delete
- B , Onions=2 Edit | Details | Delete
這是不是非常有用。我想要做的是顯示這樣的事情:
- A (Onions=4,Peppers=3) Edit | Details | Delete
- B (Rolls=2,Onions=2) Edit | Details | Delete
最終,在下一個頁面瀏覽到「編輯」行動將提供包可編輯的名稱,以及所有可用的表下來後食物和相鄰數量的盒子,以便每個包裝內的食物/數量可以更新。
任何人都可以解釋這是如何在MVC框架內完成的嗎? 我在網絡上看到的所有教程處理更簡單的數據。任何人都可以指向一些示例代碼/教程來處理這樣的事情嗎?
在此先感謝!
您的代碼引用'PackageName1'和'Food1'但我CA在控制器的操作方法中沒有看到。如果您不從方法返回匿名類型,也可以避免出現問題。相反,定義一個獨立的ViewModel類,這樣你就可以確定你正在處理的是什麼。 – Dai