繁体   English   中英

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

[英]Setting data in multiple nested lists ASP.NET MVC C#

我是一名非常熟悉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
  • 列出项目
    • 项目编号
    • 项目名称
    • 列表图
      • MapId
      • 地图标题
      • 列出ThemeMap
        • ThemeMapId
        • ThemeMapTitle

我知道我的班级名字有些古怪,但是我自己不会写。 之后将对其进行优化。

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

我在第二个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,
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM