【问题标题】:Passing variables from ViewModel to View in ASP.NET MVC4在 ASP.NET MVC4 中将变量从 ViewModel 传递到 View
【发布时间】:2012-12-11 20:30:39
【问题描述】:

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

【问题讨论】:

  • 个人电脑必须公开才能在其他地方可见,个人电脑是否公开?默认情况下,字段/属性不公开。
  • 你能解决我在下面的答案中遇到的错误吗?

标签: razor asp.net-mvc-4 viewmodel


【解决方案1】:

由于它现在存在,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));
    }

【讨论】:

  • 我收到一个错误,get 和 set 在当前上下文中不存在
  • 抱歉忘记了我原始示例中的public 访问修饰符,请尝试更新后的示例
【解决方案2】:

为了使视图能够访问它,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)

【讨论】:

  • 我仍然在获取和设置时遇到错误。此外,我的 VM 名称出现错误。
  • Pcs 后面有一个杂散的等号。
  • 就观点而言,我认为您需要使用:@foreach (Hardware item in model.Pcs)。不确定 get/set 问题 - 是运行时错误还是编译错误?
  • 我修复了获取/设置问题。我现在收到 DashboardViewModel 需要返回类型的错误。但是当我放一个时,我得到另一个错误。
  • 我收到一个错误modelmodel.Pcs 的当前上下文中不存在
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多