.Net MVC передает вложенные данные из контроллера для просмотра - PullRequest
3 голосов
/ 21 мая 2009

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

Категория

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

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 21 мая 2009

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

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

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

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

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

0 голосов
/ 21 мая 2009

Я бы настроил класс Category Model со свойством items типа IEnumerable<item>.

Затем включите свойство IEnumerable<subItem> subItems в класс item.

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

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

0 голосов
/ 21 мая 2009

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

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

...