我无法理解为什么我找不到任何清楚解释如何使用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)=@Html.DisplayFor(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框架内完成的吗? 我在网上/书中看到的所有教程都处理的数据要简单得多。任何人都可以向我指出一些处理类似事情的示例代码/教程吗?
提前致谢!
答案 0 :(得分:1)
您需要汇总结果。
创建一个像这样的视图模型
public class PackageViewModel
{
public int ID { set;get;}
public string Name { set;get;}
public List<FoodItem> FoodItems { set;get;}
public PackageViewModel()
{
FoodItems=new List<FoodItem>();
}
}
public class FoodItem
{
public string FoodName { set;get;}
public int Quantity { set;get;}
}
在您的Get操作中,您需要汇总数据中的数据,这些数据来自您的数据访问层并填充到ViewModel列表
public ActionResult IndeX()
{
List<PackageViewModel> listVM=new List<PackageViewModel>();
//Get your data and do aggregation and fill in listVM
return View(listVm)l
}
在我们看来,
@model List<PackageViewModel>
@foreach(var item in Model)
{
<tr>
<td>@item.Name</td>
<td>
foreach(var food in item.FoodItems)
{
@food.FoodName - @food.Quantity
}
</td>
<td>
@Html.ActionLink("Edit","Edit",new {@id=item.ID})
</td>
</tr>
}