ViewBag不呈现其值

时间:2013-05-03 16:28:59

标签: c# asp.net-mvc-4

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

我该怎么做?

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
}