发送匿名类型(列表)在ASP.NET核心中查看

发送匿名类型(列表)在ASP.NET核心中查看

问题描述:

我试图发送一个匿名类型到我的视图。发送匿名类型(列表)在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吗?如果是这样的话,我怎样才能用这个查询的结果填充该视图模型?

我的解决方案是以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> 

完成!