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)