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