Невозможно применить индексирование с помощью [] к выражению типа «System.Data.Entity.DynamicProxies».

С ASP.NET MVC3.

В моем контроллере у меня есть эта часть кода

    MasterMindDnetEntities context = new MasterMindDnetEntities();
    List<MasterMindDnet.Games> Games = (from g in context.Games
                                        join u in context.Users on g.g_u_Id equals u.u_Id
                                        where u.u_Login == User.Identity.Name
                                        select g).ToList();
    @ViewBag.Games = Games;
    @ViewBag.GameCount = Games.Count;
    return View("Index");

В контроле Игры нормально работают как список.

На мой взгляд, у меня есть:

@for (int i = 0; i < ViewBag.GameCount; i++)
{
    ViewBag.Games = ViewBag.Games[i];

В строке ViewBag.Games = ViewBag.Games[i]; я получаю исключение:

Невозможно применить индексирование с помощью [] к выражению типа «System.Data.Entity.DynamicProxies.

В предыдущей версии у меня было i < ViewBag.Games.Count; вместо i < ViewBag.GameCount; и было сказано, что ViewBag.Games не имеет определения для Count.

Как я мог решить это?

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


person TTT    schedule 08.04.2012    source источник


Ответы (1)


Проблема динамических прокси означает, что вы должны объявлять «статически» то, что находится в вашем ViewBag.

Итак, в вашем представлении, просто сделайте:

@{
    List<MasterMindDnetGames> games = ViewBag.Games;

    for (var i = 0; i < games.Count; i++) {
       var game = games[i];//declare it in the scope you need
       //bla bla bla
    }
}
person Raphaël Althaus    schedule 08.04.2012
comment
Спасибо. Я попробовал ваше решение, и оно отлично работает. Но я уже нашел другую вещь, чтобы заставить эту работу работать: заменить for на foreach, так как в этом случае мне действительно не нужна переменная i. - person TTT; 08.04.2012