解决页面期望的控制器输出与模型之间的差异

时间:2019-01-07 17:10:43

标签: entity-framework razor asp.net-core-mvc

我遇到一个问题,就是我的控制器未返回页面模型期望的类型。

我的控制器返回以下类型:

 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(object   值)

这是页面期望的模型:

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);
        }

我尝试了很多事情,但遇到了新的错误或此错误的某些变化。

任何见识将不胜感激!

0 个答案:

没有答案