有人可以告诉我为什么这个ViewBag不想呈现它的值吗?
ViewBag.fields = from f in db.Fields
where f.FieldId == id
select new { name = f.Name, id = f.FieldId };
@foreach(var item in ViewBag.fields)
{
@item.name//error, cannot find the definition of name
}
我也试过这个。
@foreach(var item in ViewBag.fields)
{
@item[0]//error, 'object' does not contain a definition for 'name'
}
但是,如果这样做
@foreach(var item in ViewBag.fields)
{
@item
}
渲染
{name = Document, id=1}
我该怎么做?
答案 0 :(得分:1)
nemesv的链接解释了为什么这不起作用,你基本上被迫创建一个命名类型而不是使用匿名类型。您可以使用Tuple,但是您必须首先将结果转换为IEnumerable,因为Linq to Entities不能使用构造函数参数。
因此要么创建一个类型来传输数据,要么这样做:
ViewBag.fields = (from f in db.Fields
where f.FieldId == id
select new { name = f.Name, id = f.FieldId })
.AsEnumerable()
.Select(x => new Tuple<string, int>(x.name, x.id);
然后在视图中
@foreach(var item in ViewBag.fields)
{
item.Item1
}