1

この 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}

私は何をしなければなりませんか?

4

1 に答える 1

1

nemesv のリンクでは、これが機能しない理由が説明されています。基本的に、匿名型を使用するのではなく、名前付き型を作成する必要があります。Tuple を使用することもできますが、Linq to Entities はコンストラクター パラメーターを使用できないため、最初に結果を IEnumerable に変換する必要があります。

したがって、データを転送するタイプを作成するか、次のようにします。

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
}
于 2013-05-03T16:43:01.070 に答える