entity framework - asp.net core pass linq lambda to view -
i'm using asp.net core
, when pass linq lambda query
view error:
an unhandled exception occurred while processing request. invalidoperationexception: model item passed viewdatadictionary of type 'system.collections.generic.list`1[<>f__anonymoustype7`1[system.int64]]', viewdatadictionary instance requires model item of type 'system.collections.generic.ienumerable`1[hrms.salaries]'.
this query:
public async task<iactionresult> index() { var salary = (from salaries in _context.salaries select new { salaries.id }); return view(await salary.tolistasync()); }
and in view use:
@model ienumerable<hrms.salaries> @foreach (var item in model) { <tr> <td>@item.id</td> </tr> }
is there reason create object in query? if no, try instead :
public async task<iactionresult> index() { var salary = (from salaries in _context.salaries select salaries.id ); return view(await salary.tolistasync()); }
then in view :
@model ienumerable<int> @foreach (var item in model) { <tr> <td>@item</td> </tr> }
else, if need object, use in query :
public async task<iactionresult> index() { var salary = (from salaries in _context.salaries select salaries ); return view(await salary.tolistasync()); }
and keep view same :
@model ienumerable<hrms.salaries> @foreach (var item in model) { <tr> <td>@item.id</td> </tr> }
edit : if want pass multiple fields view, it's better use new object. this, create class (for exemple, salarydetailsviewmodel) required fields. in controller :
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()); }
then adjust view call different fields of custom object, display purpose, example :
@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> }
Comments
Post a Comment