устранение несоответствия между выходом контроллера и моделью, ожидаемой на странице - PullRequest
0 голосов
/ 07 января 2019

У меня проблема с тем, что мой контроллер не возвращает тип, который ожидает моя модель страницы.

Мой контроллер возвращает тип:

 IEnumerable<List<GameSession>> grouped

А на моей странице ожидается модель типа:

IEnumerable<EFGameManager.Models.GameSession>

Проблема не в том, что я пытаюсь, я не могу заставить их совпадать.

Вот ошибка:

Произошло необработанное исключение при обработке запроса. InvalidOperationException: элемент модели, переданный в ViewDataDictionary имеет тип 'System.Linq.Enumerable + SelectEnumerableIterator 2[System.Linq.IGrouping 2 [System.Int32, EFGameManager.Models.GameList.GameSession], System.Collections.Generic.List 1[EFGameManager.Models.GameList.GameSession]]', but this ViewDataDictionary instance requires a model item of type 'System.Collections.Generic.IEnumerable 1 [EFGameManager.Models.GameList.GameSession]'. Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary.EnsureCompatible (объект значение)

Вот модель, которую ожидает страница:

Index.cshtml:

@model IEnumerable<EFGameManager.Models.GameSession>

Вот контроллер:

public async Task<IActionResult> Index(DateTime start, DateTime end)
        {
            var eventGames = await _context.GameList
                         .Where(m => m.GameCatalogId != null).ToListAsync();

            var eventPlayers = await _context.PlayerList
                .Where(p => p.PlayerType == 2).ToListAsync();

            var query = from pl in eventPages
                            join ml in eventGames on fl.GameId equals ml.GameId
                                select new GameSession
                                {
                                    Id = pl.ListingId,
                                    GameId = ml.GameId,
                                    SessionGameName = ml.GameDisplayName,
                                    SessionEventName = pl.ListingDisplayName,
                                    SessionStartTime = pl.PlayerStartTime,
                                    SessionEndTime = pl.PlayerEndTime
                                };

            var orderedResults = query
                .OrderBy(n => n.SessionGameName)
                .ThenBy(d => d.SessionDate)
                .ThenBy(t => t.SessionStartTime).ToList();

            var ts = TimeSpan.FromMinutes(30);

            var grouped = orderedResults
                            .OrderBy(r => r.GameId)
                            .ThenBy(r => r.SessionDate)
                            .ThenBy(r => r.SessionStartTime)
                            .GroupByWhile((p, n) => p.SessionDate.Value.Date == n.SessionDate.Value.Date 
                            && n.SessionStartTime - p.SessionEndTime < ts)
                            .Select(rg => rg.ToList());

            return View(grouped);
        }

Я пробовал несколько вещей, и я получаю новую ошибку или какой-то вариант этой ошибки.

Любое понимание будет с благодарностью!

...