在ViewBag中填充匿名类型导致模型绑定器问题

Išk*_*uda 8 entity-framework asp.net-mvc-3

谁能告诉我我做错了什么?:-)

我有这个简单的查询:

 var sample = from training in _db.Trainings
              where training.InstructorID == 10
              select new { Something = training.Instructor.UserName };
Run Code Online (Sandbox Code Playgroud)

我把它传递给ViewBag.

ViewBag.Sample = sample;
Run Code Online (Sandbox Code Playgroud)

然后我想在我的视图中访问它,如下所示:

@foreach (var item in ViewBag.Sample) {
    @item.Something
}
Run Code Online (Sandbox Code Playgroud)

我得到错误消息'对象'不包含'Something'的定义.如果我放在那里@item,我得到结果{ Something = SomeUserName }

感谢帮助.

Dar*_*rov 17

这是不可能做到的.ViewBag是动态的,问题是匿名类型是作为内部生成的.我建议你使用视图模型:

public class Instructor
{
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后:

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

并在视图中:

@model IEnumerable<Instructor>
@foreach (var item in ViewBag.Sample) {
    @item.Something
}
Run Code Online (Sandbox Code Playgroud)