#c# #asp.net #asp.net-mvc #list #asp.net-mvc-4
#c# #asp.net #asp.net-mvc #Список #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
- Проект списка
- ProjectID
- ProjectTitle
- Отображение списка
- mapID
- MapTitle
- Список темная карта
- ThemeMapId
- Заголовок темы
Я знаю, что имена моих классов немного не в порядке, однако я не пишу их сам. Собираюсь оптимизировать их после.
PS: Это мой первый вопрос о StackOverflow!
Комментарии:
1.
vmProject.Maps
естьList<Maps>
. Возможно, вам захочется вызвать FirstOrDefault() для этого, прежде чем обращаться к ThemeMaps .
Ответ №1:
Я немного изменил код во втором цикле 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,
});
}
Комментарии:
1. Это сработало отлично, большое вам спасибо! Что я сам не вижу этого решения. Чем это отличается от того, что я сделал? Потому что я думал, что это то же самое.