Asp.net mvc MVC传递viewmodel视图,其中viewmodel包含父值和子列表
我的应用程序在一个设施内有多个区域。我试图将单个模型传递给包含设施值(设施id、设施名称)和区域列表的视图。我目前将区域列表作为表的实体模型的一种类型(区域列表) 我的viewmodel如下所示:Asp.net mvc MVC传递viewmodel视图,其中viewmodel包含父值和子列表,asp.net-mvc,linq,entity-framework,Asp.net Mvc,Linq,Entity Framework,我的应用程序在一个设施内有多个区域。我试图将单个模型传递给包含设施值(设施id、设施名称)和区域列表的视图。我目前将区域列表作为表的实体模型的一种类型(区域列表) 我的viewmodel如下所示: public class AreaView { public string facility_name { get; set; } public int facility_id { get; set; } public int group_id { get; set; }
public class AreaView
{
public string facility_name { get; set; }
public int facility_id { get; set; }
public int group_id { get; set; }
public IList<area_list> areas { get; set; }
}
我的观点(缩写):
@model skyenergy.Models.AreaView
设施:@Model.Facility\u名称
@foreach(模型区域中的var项){
@ActionLink(item.vendor\u name,“Details”,“Area”,new{id=item.vendor\u id},null)
}
我尝试了许多变体来完成下面的内容,这给了我许多错误,但最近的一个错误如下:
传递到字典中的模型项的类型为
'System.Data.Entity.Infrastructure.DbQuery'1[MyApp.Models.AreaView],
但此词典需要类型为的模型项
“MyApp.Models.AreaView”
我知道我没有传递视图所期望的正确类型,但我似乎无法理解:
谢谢您的帮助。我认为您应该在查询的末尾添加FirstOrDefault(),以返回
区域视图
public ActionResult List(int id = 0)
{
var model = (from f in areaDB.facility_list
where f.facility_id == id
select new AreaView
{
facility_id = f.facility_id,
facility_name = f.facility_name,
areas = (from a in areaDB.area_list
orderby a.area_name
where a.facility_id == id
select a).ToList()
}).FirstOrDefault();
return View(model);
}
我不会在同一个查询中合并这两个对象,我会这样做 1) 选择id=xxxx的区域视图 2) 选择id=xxxx的区域 3) 为我的区域视图指定区域 范例
AreaView model = GetAreaView(id);
model.Areas = GetAreas(id);
return View(model);
此外,请为您的当前代码尝试以下操作
分开查询确实使它更容易。从你的例子来看,我的第一行代码看起来确实有点不同,有什么问题吗<代码>代码变量模型=(从areaDB.facility\u列表中的f中,其中f.facility\u id==id选择新的AreaView{…在调试模式下单步检查您的代码,这将使您很难知道您组合在一起的代码的价值。当您将代码分解并组合在一起时,这将使您的代码更简单、更易于测试
public ActionResult List(int id = 0)
{
var model = (from f in areaDB.facility_list
where f.facility_id == id
select new AreaView
{
facility_id = f.facility_id,
facility_name = f.facility_name,
areas = (from a in areaDB.area_list
orderby a.area_name
where a.facility_id == id
select a).ToList()
}).FirstOrDefault();
return View(model);
}
AreaView model = GetAreaView(id);
model.Areas = GetAreas(id);
return View(model);
return View(model.FirstOrDefault());