asp.net核心通LINQ拉姆达查看
我使用asp.net core
,当我通过linq lambda query
查看我得到这个错误:asp.net核心通LINQ拉姆达查看
An unhandled exception occurred while processing the request.
InvalidOperationException: The model item passed into
the ViewDataDictionary is of type 'System.Collections.Generic.List`1[<>f__AnonymousType7`1[System.Int64]]',
but this ViewDataDictionary instance
requires a model item of type 'System.Collections.Generic.IEnumerable`1[HRMS.Salaries]'.
这是我的查询:
public async Task<IActionResult> Index()
{
var salary = (from salaries in _context.Salaries select new { salaries.Id });
return View(await salary.ToListAsync());
}
,并在查看我使用:
@model IEnumerable<HRMS.Salaries>
@foreach (var item in Model)
{
<tr>
<td>@item.Id</td>
</tr>
}
是否有你在查询中创建对象的原因?如果没有,试试这个:
public async Task<IActionResult> Index()
{
var salary = (from salaries in _context.Salaries
select salaries.Id
);
return View(await salary.ToListAsync());
}
然后在您的视图:
@model IEnumerable<int>
@foreach (var item in Model)
{
<tr>
<td>@item</td>
</tr>
}
否则,如果你需要的对象,在查询中使用:
public async Task<IActionResult> Index()
{
var salary = (from salaries in _context.Salaries
select salaries
);
return View(await salary.ToListAsync());
}
而且保持你的观点一致:
@model IEnumerable<HRMS.Salaries>
@foreach (var item in Model)
{
<tr>
<td>@item.Id</td>
</tr>
}
编辑:如果你想传递多个字段到你的视图,最好使用一个新的对象。为此,使用必填字段创建一个类(例如,SalaryDetailsViewModel)。然后在你的控制器:
public async Task<IActionResult> Index()
{
var salary = (from salaries in _context.Salaries
select new SalaryDetailsViewModel {
Id = salaries.Id,
Amount = salaries.Amount,
Date = salaries.Date,
JobTitle = salaries.JobTitle.Name }
);
return View(await salary.ToListAsync());
}
然后调整您的视角来调用您的自定义对象的不同领域,用于显示目的,例如:
@model IEnumerable<SalaryDetailsViewModel>
@foreach (var item in Model)
{
<tr>
<td>@item.Id</td>
<td>@item.Amount</td>
<td>@item.Date</td>
<td>@item.JobTitle</td>
</tr>
}
感谢工作时,我使用选择薪水,但如果我喜欢这个选择新的{salaries.Id,salaries.Amount,salaries.Date,jobTitle.Name} – user3903484
看我的编辑(它可能需要一些调整,因为我不知道你的班级薪金结构) 。 – faflo10
非常感谢,完成。 – user3903484
你选择的ID,但你的观点是expectiong工资本身 –
同意@AdilMammadov。尝试'var salary = _context.Salaries;' – tmg
我同意@AdilMammadov - 展开:您目前只选择一个'IEnumerable'(如果'Id'是一个'int')并将它传递给您的View。您将只需要从查询中选择“工资”,然后将它们传递给您的视图;或者你需要改变你的视图中的'@ model'为'@model IEnumerable ',并显示你的'foreach'循环只有'@item –