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