如何将选定列的列表传递给视图

时间:2018-07-07 18:38:57

标签: c# razor asp.net-core

我是ASP.NET的新手,但是有问题。我的模型有字段(编号,名称,姓氏,年龄...),但我只想取名称和姓氏。控制器中的查询看起来不错(我得到想要的值)。问题出现在视图中,因为我给他提供了可能错误的模型类型。

如何解决?

错误

  

InvalidOperationException:传递到ViewDataDictionary的模型项的类型为'System.Collections.Generic.List'1[<>f__AnonymousType0'3[System.String,System.String,System.String]]',但是此ViewDataDictionary实例需要的模型项的类型为'System.Collections.Generic.IEnumerable'1[App.Models.Champion]'

控制器

var champions = _context.Champions.Select(x => new
{
   x.Name,
   x.Surname
}).ToList();
return View(champions);

查看

@model IEnumerable<App.Models.Champion>
@foreach (var iteam in Model)
{
   @iteam.Name @iteam.Surname <br />
}

1 个答案:

答案 0 :(得分:-1)

我已经修复了它,但是我不知道这是否是正确的考虑。

我创建了一个带有字段(名称和姓氏)的附加类,类似于视图模型。在控制器中,它将数据(我想要的)复制到新列表中,并在视图中将模型声明为新的类类型

有可能做得更好吗?

控制器

var champions = _context.Champions.Select(x => new
{
   x.Name,
   x.Surname,
}).ToList();
List<Models.ViewModel.Champion> cham = new List<Models.ViewModel.Champion>();
foreach (var iteam in champions)
{
   cham.Add(new Models.ViewModel.Champion { Name = iteam.Name, Surname= iteam.Surname });
}
return View(cham);

查看

@model IEnumerable<App.Models.ViewModel.Champion>