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
}