有人能告诉我我做错了什么吗? : - )
我有这个简单的查询:
var sample = from training in _db.Trainings
where training.InstructorID == 10
select new { Something = training.Instructor.UserName };
我把它传递给ViewBag。
ViewBag.Sample = sample;
然后我想在我的视图中访问它:
@foreach (var item in ViewBag.Sample) {
@item.Something
}
我收到错误消息'object'不包含'Something'的定义。如果我只放@item
,我会得到结果{ Something = SomeUserName }
感谢您的帮助。
答案 0 :(得分:17)
这不可能。 ViewBag是动态的,问题是匿名类型是作为内部生成的。我建议你使用视图模型:
public class Instructor
{
public string Name { get; set; }
}
然后:
public ActionResult Index()
{
var mdoel = from training in _db.Trainings
where training.InstructorID == 10
select new Instructor {
Name = training.Instructor.UserName
};
return View(model);
}
并在视图中:
@model IEnumerable<Instructor>
@foreach (var item in ViewBag.Sample) {
@item.Something
}
答案 1 :(得分:0)
如果要发送ViewData例如,并且不想发送模型 您可以使用与上部答案相同的方法 并在控制器中
enter code here
ViewData[Instractor] = from training in _db.Trainings
where training.InstructorID == 10
select new Instructor {
Name = training.Instructor.UserName
};
,在视图中,您需要将其强制转换为
`IEnumerable<Instructor>`
但是要执行此操作,您应该使用
@model IEnumerable<Instructor>
那么你可以做这样的事情
IEnumerable<instructors> Instructors =(IEnumerable<Instructor>)ViewData[Instractor];
然后使用foreach
@foreach (var item in Instructors ) {
@item.Something
}