.Net MVC передача вложенных данных из контроллера для просмотра

StackOverflow https://stackoverflow.com/questions/894072

Вопрос

Я создаю приложение .NET MVC и у меня есть представление, в котором я хочу отобразить следующее:

Категория

за которым следует список предметы для текущей категории

[возможно] за которым следует список подпункты для текущего элемента

Я мог бы создать собственный класс ViewModel, который отправляет три отдельных списка IEnumerable (категории, элементы и подэлементы).Проблема с этим подходом заключается в том, что нет простого способа отобразить данные в правильном порядке (иерархии) в представлении.При таком подходе у меня будет три списка, а затем во время рендеринга нужно будет добавить условную логику.Это будет означать, что каждый список элементов будет повторяться несколько раз, пока я пытаюсь разместить элементы в нужных позициях на странице.

Я бы предпочел передать данные в правильном порядке, например, в виде XML-файла.Какой здесь правильный подход?

Я также рассматривал возможность объединения данных в контроллере и передачи форматированного текста в представление, но это, похоже, нарушает идею рендеринга дескриптора представления.

Это было полезно?

Решение

Здесь я бы держался подальше от XML.Передайте правильную иерархию;это кажется разумным:

public class ViewModel
{
    Category[] Categories { get; set; }
}

public class Category
{
    Item[] Items { get; set; }
}

public class Item
{
    Item[] SubItems { get; set; }
}

тогда вы можете вложить foreach циклы внутри вашего представления.

Другие советы

Вероятно, вам следует иметь Пользовательский тип со списком категорий, и каждый элемент имеет свойство, в котором содержатся подэлементы.

Этого можно легко добиться в Entity Framework, используя Свойства навигации.

Я бы установил класс модели категории со свойством элементов типа IEnumerable<item>.

Затем включите IEnumerable<subItem> subItems недвижимость на item сорт.

Представление будет очень легко перебирать эти элементы и подэлементы.

Редактировать: на самом деле, если подэлементы точно такие же, как и элементы, то может быть только один item класс с IEnumerable<item> subItems свойство.Это также позволит использовать неограниченное количество подпунктов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top