Pergunta

Estou criando um aplicativo .NET MVC e eu tenho uma visão em que eu quero mostrar o seguinte:

Categoria

seguido de uma lista de itens para a Categoria atual

[possivelmente] seguido por uma lista de sub-itens para o item actual

Eu poderia criar uma classe ViewModel personalizado que envia 3 lista IEnumerable separadas (categorias, itens e subitens). O problema dessa abordagem é que não há maneira fácil de tornar os dados na ordem correta (hierarquia) na vista. Com esta abordagem teria três listas, e depois precisa adicionar lógica condicional durante a renderização. Isto significa que cada item da lista seriam iterado várias vezes como eu tento encaixar os itens nas posições corretas na página.

Eu preferiria passar de volta os dados na ordem correta, talvez como um arquivo XML. Qual é a abordagem correta aqui?

Eu também contemplado concatenando os dados no controlador e passar o texto formatado para a vista, mas isso parece violar a noção de ter a prestação vista alça.

Foi útil?

Solução

Gostaria de ficar longe de XML aqui. Passe a hierarquia apropriada; que parece razoável:

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

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

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

então você pode ter laços foreach aninhados dentro de sua vista.

Outras dicas

O que você provavelmente deve fazer é ter um Tipo personalizado com a sua lista de categorias, e cada item tem uma propriedade onde os sub-itens estão contidos.

Isto pode ser facilmente alcançado em Entity Framework, utilizando Navigation Properites .

Gostaria de definir a classe Categoria Modelo com uma itens propriedade do tipo IEnumerable<item>.

Em seguida, incluem uma propriedade IEnumerable<subItem> subItems na classe item.

A visão seria iterar através destes itens e subitens com muita facilidade.

Editar: na verdade, se sub-itens são exatamente os mesmos como itens, então não poderia ser apenas uma única classe item com uma propriedade IEnumerable<item> subItems. Isso também permitir níveis ilimitados de sub-itens.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top