Stuffing an anonymous type in ViewBag causing model binder issues

can someone tell me what I'm doing wrong? :-)

I have this simple query:

 var sample = from training in _db.Trainings
              where training.InstructorID == 10
              select new { Something = training.Instructor.UserName };

And I pass this to ViewBag.

ViewBag.Sample = sample;

Then I want to access it in my view like this:

@foreach (var item in ViewBag.Sample) {
    @item.Something
}

And I get error message 'object' does not contain a definition for 'Something'. If I put there just @item, I get result { Something = SomeUserName }

Thanks for help.


Solution 1:

This cannot be done. ViewBag is dynamic and the problem is that the anonymous type is generated as internal. I would recommend you using a view model:

public class Instructor
{
    public string Name { get; set; }
}

and then:

public ActionResult Index()
{
    var mdoel = from training in _db.Trainings
                 where training.InstructorID == 10
                 select new Instructor { 
                     Name = training.Instructor.UserName 
                 };
    return View(model);
}

and in the view:

@model IEnumerable<Instructor>
@foreach (var item in ViewBag.Sample) {
    @item.Something
}