Заполнение анонимного типа во 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
}
Другие вопросы по тегам