ASP.NET MVC4:如何将视图模型和其他数据传递给视图

时间:2012-12-12 16:30:49

标签: asp.net-mvc-4 ef-code-first viewmodel

我创建了一个名为DashboardViewModel的ViewModel:

public class DashboardViewModel
{        
    public Hardware Hardware { get; set; }
    public Software Software { get; set; }      
}

我将ViewModel传递给ActionResult中的视图。但我也需要传递其他东西。这是我的ActionResult:

public ActionResult Index()
{

    HardwareType hwt = new HardwareType { HType = "PC" };
    IEnumerable<Hardware> Pcs = db.Hardware.Where(h => h.HardwareType.Contains(hwt));

    DashboardViewModel dvm = new DashboardViewModel();   

    return View(dvm);
}

如果我已经通过Pcs,如何将dvm传递给视图?我甚至都不知道这是不是正确的做法。我想要完成的是在页面上创建导航。因此,我不仅会拥有PC,而且还会将监视器和打印机传递给视图以及软件。这是我的硬件类:

public class Hardware
{
    public int Id { get; set; }
    public virtual ICollection<DeviceType> Type { get; set; }
    public string AssetTagId { get; set; }
    public virtual ICollection<Manufacturer> Manufacturer { get; set; }
    [Required]
    [StringLength(50)]
    public string ServiceTagId { get; set; }
    [Required]
    [StringLength(50)]
    public string SerialNumber { get; set; }
    [Required]
    [StringLength(75)]
    public string ProductNumber { get; set; }
    // [Required]
    [StringLength(20)]
    public string PurchaseDate { get; set; }
    [StringLength(20)]
    public string WarrantyExpiration { get; set; }
    [Required]
    [StringLength(20)]
    public string WarrantyType { get; set; }
    public virtual ICollection<Location> Location { get; set; }
    public virtual ICollection<HardwareType> HardwareType { get; set; }
    [Required]
    [StringLength(2000)]
    public string Notes { get; set; }
    public string POATag { get; set; }
}

我想做什么的最佳方法是什么(使用各种类别的硬件和软件创建导航)?我是MVC的新手,我正在尝试遵循有关该做什么的建议,但我可以使用更高级别的方法,因为我可能会发现这一切都是错误的。感谢。

2 个答案:

答案 0 :(得分:0)

您可以将Pcs放入ViewBag or ViewData,如下所示:

public ActionResult Index()
{

    HardwareType hwt = new HardwareType { HType = "PC" };
    IEnumerable<Hardware> Pcs = db.Hardware.Where(h => h.HardwareType.Contains(hwt));
    ViewBag.Pcs=Pcs;//or ViewData["Pcs"]=Pcs;

    DashboardViewModel dvm = new DashboardViewModel();   

    return View(dvm);
}

ViewBag是动态对象。您可以添加任何内容。任何名称,例如您Pcs也可以ViewBag ViewBag.AnyNameYouLike=Pcs;

存储在**RAZOR SYNTAX:**
@foreach(var pc in ViewBag.Pcs)
{
  @pc.Id;//Will give you id

}

只需应用循环即可完成。

{{1}}

您可以循环浏览所有属性

答案 1 :(得分:0)

创建顶级视图模型 - 就像您拥有DashboardViewModel - 并将所有必需的模型添加为属性。

如果您为该顶级视图模型中所需的每个业务模型创建了视图模型,那将是一件好事。

将业务对象自动映射到新的视图模型 - 有关示例,请参阅AutoMapper。这样,您只传递视图实际需要的信息。