私はASPとC#の非常に基本的な知識を持つインターンです。 私はASP.NET MVCで作業しているアプリケーションのプロジェクト>マップ>テーママップのリストを表示しようとしています。私の3番目のforeachでは、私はエラーを得る:"ThemeMaps"の定義を含まず、拡張メソッド "ThemeMaps"がタイプの最初の引数を受け入れることができませんでした "。複数のネストされたリストにデータを設定するASP.NET MVC C#
は私が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);
}
次のようになり、私は紙の上で開始する前に、私はscetchを作っ
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; }
}
}
私のviewmodelクラス、:
- が
- をLayerIdプロジェクトを一覧表示
- PROJECTID
- ProjectTitle
- 一覧マップ
- MapId
- MapTitle
- 一覧ThemeMap
- ThemeMapId
- ThemeMapTitle
私は私のクラスの名前を知っているが、しかし私はそれらを自分で書くdin't、ビットダサく外です。後にそれらを最適化するつもりです。
PS:これは私の最初の質問StackOverflowです!
'' vmProject.Maps''は '' List ''です。 ThemeMapsにアクセスする前に、FirstOrDefault()を呼び出すことができます。 –
usercr