1

我有这个 ViewModel:

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

        }

我想将 Pcs 变量传递给我的视图,以便可以遍历它。这是我的控制器:

 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在当前上下文中不存在的错误。我在这里做错了什么?

4

2 回答 2

0

由于它现在存在,Pcs 被限定为仅存在于 viewmodel 的构造函数中的变量,因此您需要将 PCS 变量作为成员级别变量公开给 ViewModel..

    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));
    }
于 2012-12-11T20:33:15.213 回答
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)
于 2012-12-11T20:40:41.233 回答