Strange razor behavior with the <dynamic> list
This is my controller code:
IQueryable<Foo> foos = dbContext.Foos.Where(...);
return View(foos);
And this razor code (cshtml) works well :
@model IQueryable<Foo>
@{
IQueryable<Foo> foos = Model;
var projected = foos.Select(e => new
{
fooId = e.FooId,
bar = new
{
barId = e.Foo.BarId
}
}).ToList();
}
@foreach (var x in projected)
{
<span>@x.fooId</span><br />
}
But this razor code (cshtml) does not work, being almost the same:
@model IQueryable<Foo>
@{
IQueryable<Foo> foos = Model;
var projected = foos.Selected(Foo.Projection()).ToList()
}
@foreach (var x in projected)
{
<span>@x.fooId</span><br />
}
Foo.Projection() is a static method that I reuse:
public static Expression<Func<Foo, dynamic>> Projection()
{
return e => new
{
fooId = e.FooId,
bar = new
{
barId = e.Foo.BarId
}
}
}
I get this famous error: 'object' does not contain definition for 'fooId'which is discussed here: The dynamic MVC Razor model, 'object' does not contain a definition for 'PropertyName' , but none of these answers helped me.
: ", MVC 3 , ", List<dynamic> ( " , " ), ( ). :
:
List<dynamic> foos = dbContext.Foos.Select(Foo.Projection()).ToList();
return View(foos);
:
@model dynamic
etc.
: ( ), "a definition for..." ( x, lot)

+4
3
dynamic, . , , , - internal , .
, Razor, , , , . , , , .
, Razor. , dynamic, , .
, MVC Razor , . dynamic , , .
, , ExpandoObject .
+6
, View() contructor , , dynamic. :
List<dynamic> foos = dbContext.Foos.Select(Foo.Projection()).ToList();
ViewData.Model = foos;
return View();
View, - ViewModel, IntelliSense?
View MVC 3, ViewBag, dynamic.
Controller:
List<dynamic> foos = dbContext.Foos.Select(Foo.Projection()).ToList();
ViewBag = foos;
return View();
View:
@foreach (var x in ViewBag)
{
<span>@x.fooId</span><br />
}
+1