Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ViewBag不渲染其值_C#_Asp.net Mvc 4 - Fatal编程技术网

C# 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不想渲染它的值吗

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”字段-很好。