2017-11-18 93 views
0

我試圖發送一個匿名類型到我的視圖。發送匿名類型(列表)在ASP.NET核心中查看

匿名形式建立,通過以下方式:

public async Task<IActionResult> Historial() 
    { 
     return View(await _context.HechosLiquidador 
      .Select(c => new { Store = c.StoreID, LiqDate = c.FechaLFinLiq}).Distinct() 
      .AsNoTracking().OrderBy(s => s.LiqDate).ToListAsync()); 
    } 

本案的特殊性在於,查詢的結果是項目的列表。我怎樣才能把它傳遞給視圖?

我應該構建一個ViewModel嗎?如果是這樣的話,我怎樣才能用這個查詢的結果填充該視圖模型?

回答

0

我的解決方案是以ViewModel的方式進行的。

定義視圖模型:

public class HistorialIndexData 
{ 
    public string StoreName { get; set; } 

    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
    public DateTime FechaLFinLiq { get; set; } 
} 

在控制器:

首先,我們將得到我們想要列出的項目,然後重複通包含這些項目的對象,並通過一個將它們添加一個到ViewModel對象並創建一個新列表。

public async Task<IActionResult> Historial() 
    { 
     List<HistorialIndexData> newHistorial = new List<HistorialIndexData>(); 
     var items = await _context.HechosLiquidador.Include(s => s.Stores) 
      .Select(c => new { Store = c.Stores.StoreName, LiqDate = c.FechaLFinLiq }).Distinct() 
      .AsNoTracking().OrderBy(s => s.LiqDate).ToListAsync(); 

     foreach(var itemtolist in items) 
     { 
      HistorialIndexData info = new HistorialIndexData 
      { 
       StoreName = itemtolist.Store, 
       FechaLFinLiq = itemtolist.LiqDate 
      }; 
      newHistorial.Add(info); 
     } 

     return View(newHistorial); 
    } 

更新視圖以使用新的ViewModel的列表。

@model List<Application.Models.ApplicationviewModels.HistorialIndexData> 

完成!