[asp.net-mvc]呈现不同表中基于多年的视图

发布时间: 2016/10/6 3:10:19
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图使多年来不同呈现不同的 html 表的视图。

这是用于视图的模型︰

public class VisualizzaFattureViewModel
    {
        public FileInfo FatturaFile { get; set; }    
        public int Year { get; set; }
    } 

这是控制器操作︰

public ActionResult VisualizzaFatture()
        {
            DirectoryInfo fattureFilesDirectory = null;
            FileInfo[] fattureFiles = null;

            try
            {
                string fattureFilesPath = Server.MapPath("~/Documents/Fatture/");
                fattureFilesDirectory = new DirectoryInfo(fattureFilesPath);
                fattureFiles = fattureFilesDirectory.GetFiles();
            }
            catch (DirectoryNotFoundException exp)
            {
                throw exp;
            }
            catch (IOException exp)
            {
                throw exp;
            }

            fattureFiles = fattureFiles.OrderByDescending(f => f.Name).ToArray();

            List<VisualizzaFattureViewModel> fatture = new List<VisualizzaFattureViewModel>();
            foreach (var file in fattureFiles)
            {
                var model = new VisualizzaFattureViewModel();
                model.FatturaFile = file;
                model.Year = int.Parse(fattureFiles.First().Name.Split('_').ElementAt(1));
                fatture.Add(model);
            }

            return View(fatture);

我想要这种方式显示数据的视图,例如︰

    [2016]
    |--------------------------------------|
    |file5.name                            |
    |--------------------------------------|    

    [2015]
    |--------------------------------------|
    |file4.name                            |
    |--------------------------------------|
    |file3.name                            |
    |--------------------------------------|

    [2013]
    |--------------------------------------|
    |file2.name                            |
    |--------------------------------------|
    |file1.name                            |
    |--------------------------------------|

如何能够做到?

解决方法 1:

我认为你应该重新定义您的模式,包含表的信息,如你所描述。就像这样︰

// Dictionary key is the year
// Dictionary value is a list of FileInfo structures for that year
public class VisualizzaFattureViewModel
{
    public Dictionary<int, List<FileInfo>> Items { get; set; }
}

然后解析多年填充模型项︰

var model = new VisualizzaFattureViewModel();
model.Items = new Dictionary<int, List<FileInfo>>();
foreach (var file in fattureFiles)
{
    var year = int.Parse(file.Name.Split('_').ElementAt(1));
    if (!model.Items.ContainsKey(year))
    {
        model.Items.Add(year, new List<FileInfo>());
    }
    model.Items[year].Add(file);
}
return View(model);

你认为你只是然后让两个 foreach 语句循环第一年,然后通过每年的项目并据此构建表标记。您还可以通过年如果你喜欢降序 (因为这是如何你已经显示在示例表中) 的第一排序字典。

希望它能帮助。如果您还需要查看示例,请让我知道。

赞助商