Razor 在ASP.NET MVC4中将变量从ViewModel传递到视图

Razor 在ASP.NET MVC4中将变量从ViewModel传递到视图,razor,asp.net-mvc-4,viewmodel,Razor,Asp.net Mvc 4,Viewmodel,我有这个模型: public DashboardViewModel(Dashboard dashboard) { HardwareType hwt = new HardwareType { HType = "PC" }; IQueryable<Hardware> Pcs = db.Hardware.Where(h => h.HardwareType.Contains(hwt)); } 我的看法是

我有这个模型:

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

        }
我的看法是:

@{
    @model CIT.ViewModels.DashboardViewModel
}

...

 @foreach (var item in Pcs) {
    <li><a href="#" class="btn"><i class="icon-hdd"></i> @item.HardwareType</a></li>
 }
@{
@模型CIT.ViewModels.DashboardViewModel
}
...
@foreach(Pcs中的var项目){
  • }

    但是我得到一个错误,
    Pcs
    在当前上下文中不存在。我这里做错了什么?

    因为它现在存在,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));
        }
    
    public IEnumerable PC{get;set;}
    公共仪表板视图模型(仪表板)
    {
    HardwareType hwt=新的HardwareType{HType=“PC”};
    Pcs=db.Hardware.Where(h=>h.HardwareType.Contains(hwt));
    }
    
    为了让视图能够访问它,
    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));
    }
    

    个人电脑必须是公共的才能被看到,否则,个人电脑在哪里是公共的?默认情况下,字段/属性不是公共的。您能解决我在下面的回答中遇到的错误吗?我遇到了一个错误,当前上下文中不存在get和set。对不起,在我的原始示例中忘记了
    public
    access修饰符,请尝试更新的示例。我仍然在get和set中遇到错误。另外,我发现VM名称有错误。在PC后有一个不正确的等号。在视图中,我认为您需要使用:
    @foreach(model.Pcs中的硬件项)
    。不确定get/set问题-是运行时错误还是编译错误?我修复了get/set问题。我现在得到一个错误,DashboardViewModel需要返回类型。但是当我放置一个时,我得到了另一个错误。我得到的错误
    model
    model.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)