asp.net core pass linq lambda 查看
asp.net core pass linq lambda to view
我正在使用 asp.net core
,当我通过 linq lambda query
查看时出现此错误:
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>
}
EDIT :如果您想将多个字段传递给您的视图,最好使用一个新对象。为此,创建一个包含必填字段的 class(例如,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>
}
我正在使用 asp.net core
,当我通过 linq lambda query
查看时出现此错误:
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>
}
EDIT :如果您想将多个字段传递给您的视图,最好使用一个新对象。为此,创建一个包含必填字段的 class(例如,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>
}