ViewBag不渲染它的值

本文关键字:ViewBag | 更新日期: 2023-09-27 18:12:05

有人能告诉我为什么这个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
}

And i try also this.

@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}

我该怎么做?

ViewBag不渲染它的值

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
}