2009-08-14 9 views
5

J'ai une vue fortement typée à une classe d'article. Dans mon contrôleur, j'ai besoin d'envoyer deux listes différentes. Existe-t-il un moyen plus simple de le faire autre que de créer une nouvelle classe avec deux listes. Ce que j'essaie finalement de faire est d'avoir sur ma page d'accueil 10 articles classés par date, et 10 articles classés par popularité.Asp.Net MVC - Vue fortement typée avec deux listes de même type

Ce que je ne

En fait, je suis allé avec une combinaison des deux réponses. J'ai fortement tapé ma vue à la nouvelle classe que j'ai créée avec les deux listes. J'ai ensuite fortement typé deux vues partielles à chacune des listes. Peut sembler comme exagéré, mais j'aime comment il s'est avéré.

Répondre

10

"créer une nouvelle classe avec deux listes" est la voie à suivre. C'est ce qu'on appelle un modèle de vue et une fois que vous l'adoptez, la puissance des vues fortement typées s'ouvre vraiment. Il peut être aussi simple:

public class IndexViewModel 
{ 
    public List<Item> Newest { get; set; } 
    public List<Item> Popular { get; set; } 
} 
3

Il est ce que John a suggéré ou non d'avoir une vue fortement typé et les ajouter à la ViewData:

ViewData["Newest"] = Newest; 
ViewData["Popular"] = Popular 

Une autre option serait fortement typées vues partielles.

1

Vous devez créer un modèle qui inclut les deux listes spécifiquement pour la vue.

Typiquement dans le petit MVC que j'ai fait, j'ai fait un modèle pour chaque vue même si elles ont simplement transmis des données identiquement servies par données ou couche de gestion juste pour garder la séparation entre les deux parties . Cette configuration est un peu plus de travail et pas nécessaire dans de nombreux cas simples, mais il garde les choses plus propres à mon avis.

4

Il y a deux philosophies générales à cela. Le premier est de prendre l'approche de John Sheehan. Vous créez un modèle de vue personnalisé avec les deux listes et le transmettez à votre vue fortement typée.

La seconde consiste à considérer les listes comme des données "auxiliaires" et à les placer dans ViewData comme jeef3. Mais, lorsque vous rendez les listes, vous utilisez un partiel fortement typé.

ViewData["Newest"] = Newest; 
ViewData["Popular"] = Popular 

Je veux dire dans votre écran principal, vous appelleriez RenderPartial (...) mais passent dans la clé de données de vue que vous avez utilisé.

Et votre partie ressemblerait à ceci:

<%@ ViewUserControl Inherits="System.Web.Mvc.ViewUserControl<List<Item>>" %> 
... 

Cela vous donne fortement typé accès à ces données de vue à partir de votre partie.

Questions connexes