Заполнение анонимного типа во ViewBag, вызывающее проблемы с подшивкой модели - PullRequest
8 голосов
/ 13 апреля 2011

может кто-нибудь сказать мне, что я делаю не так?: -)

У меня есть этот простой запрос:

 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 }

Спасибо за помощь.

Ответы [ 2 ]

17 голосов
/ 13 апреля 2011

Это не может быть сделано.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
}
0 голосов
/ 31 марта 2019

Если вы хотите отправить в 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 (var item in Instructors ) {
    @item.Something
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...