2013-02-25 31 views
3

我的應用程序在一個設施內有多個區域。我試圖將單個模型傳遞給包含設施值(facility_id,facility_name)的視圖和區域列表。我現在將區域列表作爲表(area_list)的實體模型的類型。使用包含父值和子列表的視圖模型的MVC傳遞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; } 

} 

順便說一句,我本來試圖設置(地區)而不是模型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. 是視圖模型設置正確的firstplace(怎麼混值和如何構建我的LINQ查詢孩子
  2. 的列表,以獲得一個AreaView對象與 我的所有數據
  3. 適當地傳遞下去(在正確的類型),以我的觀點

我已經閱讀了關於Stackoverflow的大約45篇文章,但似乎無法將它們拼湊在一起來完成上述內容。如果任何人有正確的解決方案(甚至是一個方向),我會非常感激。

感謝您的任何幫助。

回答

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()); 
+0

拆分查詢確實使它更容易。從你的例子來看,我的第一行代碼看起來有點不同,這有什麼問題? 'code var model =(from from f in areaDB.facility_list where f.facility_id == id select new AreaView {...' – user1644147 2013-02-25 19:23:45

+0

在調試模式下跳過您的代碼,這將使它很難知道那些值你把它們放在一起,當你把事情分解並把它們聯繫在一起時,它使你的代碼更簡單,更容易測試 – codingbiz 2013-02-25 19:36:41

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); 
} 
相關問題