Заполнение анонимного типа во ViewBag, вызывающее проблемы с подшивкой модели
Может кто-нибудь сказать мне, что я делаю не так?:-)
У меня есть этот простой запрос:
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
}
И я получаю сообщение об ошибке "объект" не содержит определения для "что-то". Если я положу там просто @item
Я получаю результат { Something = SomeUserName }
Спасибо за помощь.
1 ответ
Это не может быть сделано. 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
}
Если вы хотите отправить в 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
}