3

我的申请在一个设施中有多个区域。我正在尝试将单个模型传递给包含设施值(设施 ID、设施名称)和区域列表的视图。我目前将区域列表作为表的实体模型类型(area_list)。

我的视图模型如下:

 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”类型的模型项。

我知道我没有传递视图所期望的正确类型,但我似乎无法弄清楚:

  1. 视图模型设置是否正确(如何混合值和子列表
  2. 如何构建我的 linq 查询以获取一个包含所有数据的 AreaView 对象
  3. 将它适当地(以正确的类型)传递给我的视图

我在 Stackoverflow 上阅读了大约 45 篇文章,但似乎无法将它们拼凑在一起以完成上述内容。如果有人有正确的解决方案(甚至是方向),我将不胜感激。

谢谢你的帮助。

4

2 回答 2

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);
}
于 2013-02-25T18:29:03.063 回答
0

我不会在同一个查询中组合这两个对象。我会做

1) 选择 id = xxxx 的 AreaView

2) 选择 id = xxxx 的区域

3) 将区域分配给我的 AreaView

例子

AreaView model = GetAreaView(id);

model.Areas = GetAreas(id);

return View(model);

另外,为您当前的代码尝试以下操作

return View(model.FirstOrDefault());
于 2013-02-25T18:32:42.583 回答