在多个嵌套列表中设置数据ASP.NET MVC C#

时间:2016-10-05 15:30:04

标签: c# asp.net asp.net-mvc list asp.net-mvc-4

我是一名具有ASP和C#基础知识的实习生。 我正在尝试显示项目列表>地图>我正在ASP.NET MVC中工作的应用程序中的主题图。在我的第三个foreach中,我得到一个错误:“不包含”ThemeMaps“的定义,并且没有扩展方法”ThemeMaps“接受类型的第一个参数可以找到”。

我很困惑为什么 vmProject.Maps 不包含属性 ThemeMaps 。我像地图一样实例化了这个列表。我做错了什么?

LayersController.cs

            // Create viewmodel object
            var viewModel = new AddLayerToThemeMapViewModel();

            // Create Project list
            viewModel.Projects = new List<AddProject>();

            // Loop over all maps
            List<Project> projects = this.applicationDb.Projects.OrderBy(e => e.Title).ToList();
            foreach (var project in projects)
            {
                // Create map
                var vmProject = new AddProject()
                {
                    ProjectId = project.ProjectID,
                    ProjectTitle = project.Title,
                    Maps = new List<AddLayerMap>(),
                };

                foreach (var map in project.Maps.OrderBy(e => e.Title))
                {
                    // Create map
                    vmProject.Maps.Add(new AddLayerMap()
                    {
                        MapId = map.MapId,
                        MapTitle = map.Title,
                        ThemeMaps = new List<AddLayerMapThemeMap>(),
                    });

                    // Loop over all thememaps in map
                    foreach (var thememap in map.ThemeMaps.OrderBy(e => e.Order))
                    {
                        vmProject.Maps.ThemeMaps.Add(new AddLayerMapThemeMap()
                        {
                            ThemeMapId = thememap.ThemeMapId,
                            ThemeMapTitle = thememap.Title,
                        });
                    }
                }

                // Add map to list
                viewModel.Projects.Add(vmProject);
            }

我的viewmodel类

using Mapgear.MapViewer.Entities;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Mapgear.MapViewer.ViewModels
{
    public class AddLayerToThemeMapViewModel
    {
        public Guid LayerId { get; set; }

        public List<AddProject> Projects { get; set; }
    }

    public class AddProject
    {
        public Guid ProjectId { get; set; }

        public string ProjectTitle { get; set; }

        public List<AddLayerMap> Maps { get; set; }
    }

    public class AddLayerMap
    {
        public Guid MapId { get; set; }

        public string MapTitle { get; set; }

        public List<AddLayerMapThemeMap> ThemeMaps { get; set; }
    }

    public class AddLayerMapThemeMap
    {
        public Guid ThemeMapId { get; set; }

        public string ThemeMapTitle { get; set; }
    }
}

在我开始写纸之前,我做了一个观察,如下所示:

  • layerId的
  • 列出项目
    • 专案编号
    • ProjectTitle
    • 列表地图
      • 的azazaz
      • MapTitle
      • 列出ThemeMap
        • ThemeMapId
        • ThemeMapTitle

我知道我的班级名字有点不合时宜,但我不会自己写。之后会优化它们。

PS:这是关于StackOverflow的第一个问题!

1 个答案:

答案 0 :(得分:0)

我修改了第二个for-each循环中的代码。我为新创建的地图添加了一个变量,并将主题图添加到此创建的地图中。检查它是否正确。

var newMap = new AddLayerMap()
{
    MapId = map.MapId,
    MapTitle = map.Title,
    ThemeMaps = new List<AddLayerMapThemeMap>(),
};
// Create map
vmProject.Maps.Add(newMap);

// Loop over all thememaps in map
foreach (var thememap in map.ThemeMaps.OrderBy(e => e.Order))
{
    newMap.ThemeMaps.Add(new AddLayerMapThemeMap()
    {
        ThemeMapId = thememap.ThemeMapId,
        ThemeMapTitle = thememap.Title,
    });
}