我的应用程序在一个设施内有多个区域。我试图将单个模型传递给包含设施值(facility_id,facility_name)和区域列表的视图。我目前将区域列表作为表的实体模型类型(area_list)。
我的viewmodel如下:
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; }
}
顺便说一句,我最初尝试将区域列表设置为单独的视图模型(AreaS)而不是模型area_list,但我还有其他问题,所以回到直接引用为简单起见。我假设这更合适......
我的控制器:
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()
});
return View(model);
}
我的观点(缩写):
@model SkyeEnergy.Models.AreaView
Facility: @Model.facility_name
@foreach (var item in Model.areas) {
<tr>
<td>
@Html.ActionLink(item.vendor_name,"Details","Area",new {id = item.vendor_id},null)
</td>
</tr>
}
我尝试过多种变体来完成下面的操作,这给了我很多错误,但最新的错误如下:
传递到字典中的模型项是类型的 'System.Data.Entity.Infrastructure.DbQuery`1 [MyApp.Models.AreaView]', 但是这个字典需要一个类型的模型项 'MyApp.Models.AreaView'。
据我所知,我没有为视图所期望的内容传递正确的类型,但我似乎无法弄明白:
我已经在Stackoverflow上阅读了大约45篇文章,但似乎无法将它们拼凑在一起以完成上述内容。如果有人有正确的解决方案(甚至是方向),我将非常感激。
感谢您的帮助。
答案 0 :(得分:1)
我认为您应该在查询末尾添加FirstOrDefault()以返回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);
}
答案 1 :(得分:0)
我不会在同一个查询中组合这两个对象。我会做的
1)选择AreaView,其中id = xxxx
2)选择id = xxxx
的区域3)将区域分配给我的AreaView
实施例
AreaView model = GetAreaView(id);
model.Areas = GetAreas(id);
return View(model);
另外,请针对当前代码尝试以下操作
return View(model.FirstOrDefault());