0

我使用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> 
    } 
+2

你选择的ID,但你的观点是expectiong工资本身 –

+0

同意@AdilMammadov。尝试'var salary = _context.Salaries;' – tmg

+0

我同意@AdilMammadov - 展开:您目前只选择一个'IEnumerable '(如果'Id'是一个'int')并将它传递给您的View。您将只需要从查询中选择“工资”,然后将它们传递给您的视图;或者你需要改变你的视图中的'@ model'为'@model IEnumerable ',并显示你的'foreach'循环只有'​​@item –

回答

0

是否有你在查询中创建对象的原因?如果没有,试试这个:

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> 
         } 
+0

感谢工作时,我使用选择薪水,但如果我喜欢这个选择新的{salaries.Id,salaries.Amount,salaries.Date,jobTitle.Name} – user3903484

+0

看我的编辑(它可能需要一些调整,因为我不知道你的班级薪金结构) 。 – faflo10

+0

非常感谢,完成。 – user3903484