Razor ASP.NET MVC4:如何将IEnumerable转换为ViewBag的字符串

Razor ASP.NET MVC4:如何将IEnumerable转换为ViewBag的字符串,razor,asp.net-mvc-4,Razor,Asp.net Mvc 4,这就是我想做的,但它不起作用: HardwareType hwt = new HardwareType { HType = "PC" }; IEnumerable<Hardware> Pcs = db.Hardware.Where(h => h.HardwareType.Contains(hwt)); ViewBag.Pcs = Pcs.ToString(); HardwareType hwt=new HardwareType{HType=“PC”}; IEnumerable

这就是我想做的,但它不起作用:

HardwareType hwt = new HardwareType { HType = "PC" };
IEnumerable<Hardware> Pcs = db.Hardware.Where(h => h.HardwareType.Contains(hwt));
ViewBag.Pcs = Pcs.ToString();
HardwareType hwt=new HardwareType{HType=“PC”};
IEnumerable Pcs=db.Hardware.Where(h=>h.HardwareType.Contains(hwt));
ViewBag.Pcs=Pcs.ToString();
那么,如何将IEnumerable转换为字符串(或其他基本数据类型),以便编译器在我的Razor中使用它时不会给我错误

@foreach (var item in ViewBag.Pcs) {
     <li><a href="#" class="btn"><i class="icon-hdd"></i> @item.HType</a></li>
}
@foreach(ViewBag.Pcs中的变量项){
  • }
    硬件类别:

    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; }
        }
    
    公共类硬件
    {
    公共int Id{get;set;}
    公共虚拟ICollection类型{get;set;}
    公共字符串AssetTagId{get;set;}
    公共虚拟ICollection制造商{get;set;}
    [必需]
    [长度(50)]
    公共字符串ServiceTagId{get;set;}
    [必需]
    [长度(50)]
    公共字符串序列号{get;set;}
    [必需]
    [第75段]
    公共字符串ProductNumber{get;set;}
    //[必需]
    [行政长官(20)]
    公共字符串PurchaseDate{get;set;}
    [行政长官(20)]
    公共字符串保修扩展{get;set;}
    [必需]
    [行政长官(20)]
    公共字符串担保类型{get;set;}
    公共虚拟ICollection位置{get;set;}
    公共虚拟ICollection硬件类型{get;set;}
    [必需]
    [秘书长(2000年)]
    公共字符串注释{get;set;}
    公共字符串POATag{get;set;}
    }
    
    硬件类型:

    public class HardwareType
        {
            public int Id { get; set; }
            [Required]
            [StringLength(128)]
            public string HType { get; set; }
            public virtual ICollection<Hardware> Hardware { get; set; }
        }
    
    公共类硬件类型
    {
    公共int Id{get;set;}
    [必需]
    [第128段]
    公共字符串HType{get;set;}
    公共虚拟ICollection硬件{get;set;}
    }
    
    在我看来,问题似乎在于您正在将其转换为字符串,如下所示:

    ViewBag.Pcs = Pcs.ToString();
    
    你为什么这么做?看起来您希望迭代视图中序列中的各个项。或使用:

    ViewBag.Pcs = Pcs;
    

    如果要强制实现查询,请执行以下操作

    编辑:再次查看错误,我怀疑问题出在
    Where
    子句上。我怀疑你真的想要:


    问题是试图使用您的
    hwt
    值作为查询的输入…

    我尝试了ViewBag.Pcs=Pcs,它给了我以下错误:
    无法创建“CIT.Models.HardwareType”类型的常量值。在此上下文中仅支持基本类型(“如Int32、字符串和Guid”)。
    Pcs.ToList也存在同样的问题。这是我的硬件类的结构吗?@sehummel:你需要提供更多关于错误的信息。这听起来像是来自查询提供程序的错误,而不是编译时错误。请从查询提供者那里读一读你的意思是什么?@sehummel:看我的编辑-我怀疑问题与你认为的大不相同。
    ViewBag.Pcs = Pcs.ToList();
    
    var pcs = db.Hardware.Where(h => h.HardwareType.Any(hwt => hwt.HType == "PC"));
    ViewBag.Pcs = pcs.ToList(); // Materialize the query