C# ViewBag不渲染其值
有人能告诉我为什么这个ViewBag不想渲染它的值吗C# ViewBag不渲染其值,c#,asp.net-mvc-4,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 de
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}
我该怎么办?nemesv的链接解释了为什么这不起作用,您基本上被迫创建命名类型,而不是使用匿名类型。您可以使用Tuple,但必须首先将结果转换为IEnumerable,因为LINQto实体不能使用构造函数参数 因此,要么创建一个类型来传输数据,要么执行以下操作:
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);
nemesv的链接解释了为什么这不起作用,您基本上被迫创建命名类型,而不是使用匿名类型。您可以使用Tuple,但必须首先将结果转换为IEnumerable,因为LINQto实体不能使用构造函数参数 因此,要么创建一个类型来传输数据,要么执行以下操作:
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);
您确定查询实际返回了数据吗?是的,当我只编写@item时,它呈现{name=document,id=1}您是否尝试通过.ToList()将查询结果转换为列表?因为,您的IQueryable可能链接到一个datacontext,该datacontext在超出作用域后被销毁。其他重复项:您确定查询实际返回了数据吗?是的,当我只写它呈现的@item{name=document,id=1}时,您是否尝试过通过.ToList()将查询结果转换为列表?因为,您的IQueryable可能链接到一个datacontext,该datacontext在超出范围后被销毁。其他副本:这有什么帮助?字段仍然是动态的,这与匿名对象一起导致问题。@nemesv-虽然问题不是因为动态,但您是正确的。我使用了另一种技巧。对于元组,您需要引用带有
@item.item1
@nemesv的“name”字段-捕捉良好。这会有什么帮助?字段仍然是动态的,这与匿名对象一起导致问题。@nemesv-虽然问题不是因为动态,但您是正确的。我使用了另一种技巧。对于元组,您需要引用带有@item.item1
@nemesv的“name”字段-很好。