2012-12-11 34 views
1

查看我有這樣的視圖模型:從視圖模型變量傳遞到ASP.NET MVC4

public DashboardViewModel(Dashboard dashboard) 
     { 
      HardwareType hwt = new HardwareType { HType = "PC" }; 
      IQueryable<Hardware> Pcs = db.Hardware.Where(h => h.HardwareType.Contains(hwt)); 

     } 

我想將電腦變量傳遞給我的看法,所以我可以通過它進行迭代。這裏是我的控制器:

public ActionResult Index() 
     { 
      ViewBag.Title = "ULS Computer Inventory Tracker"; 

      Dashboard dashboard = new Dashboard(); 
      var dashbaordViewModel = new DashboardViewModel(dashboard); 

      return View(dashboardViewModel); 
     } 

而我的觀點:

@{ 
    @model CIT.ViewModels.DashboardViewModel 
} 

... 

@foreach (var item in Pcs) { 
    <li><a href="#" class="btn"><i class="icon-hdd"></i> @item.HardwareType</a></li> 
} 

但我得到Pcs不會在當前的背景下存在的錯誤。我在這裏做錯了什麼?

+0

電腦已是公開的是別的地方可見的,是個人電腦公衆在理想情況下本應通過公共財產做什麼?字段/屬性默認情況下不公開。 –

+0

你能解決我在下面的答案中得到的錯誤嗎? – sehummel

回答

0

因爲它現在電腦的作用域確定爲唯一的,所以你需要暴露PCS變量作爲成員級別變量視圖模型存在於視圖模型的構造函數的變量存在..

public IEnumerable<Hardware> Pcs { get; set; } 

    public DashboardViewModel(Dashboard dashboard) 
    { 
     HardwareType hwt = new HardwareType { HType = "PC" }; 
     Pcs = db.Hardware.Where(h => h.HardwareType.Contains(hwt)); 
    } 
+0

這使得總體感覺。 – sehummel

+0

我得到一個錯誤,得到並設置不存在於當前上下文中 – sehummel

+0

對不起在我原來的例子中忘記了'public'訪問修飾符,嘗試更新示例 –

0

對於該視圖能夠訪問它,Pcs需要從實例範圍公開訪問。

Public IEnumerable<Hardware> Pcs {get; private set;} 

public DashboardViewModel(Dashboard dashboard) 
{ 
    HardwareType hwt = new HardwareType { HType = "PC" }; 
    this.Pcs = db.Hardware.Where(h => h.HardwareType.Contains(hwt)); 
} 

也應通過在視圖模型引用它:

@foreach (Hardware item in Model.Pcs) 
+0

我仍然得到和設置錯誤。另外,我收到VM名稱的錯誤。 – sehummel

+0

Pcs後有一個流浪的等號。 – sehummel

+0

在視圖上,我認爲你需要使用:'@foreach(model.Pcs中的硬件項)'。不確定get/set問題 - 是運行時錯誤還是編譯錯誤? –

相關問題