Question

J'ai une vue fortement typée à une classe d'objet. Dans mon contrôleur je dois envoyer deux listes différentes. Y at-il un moyen plus facile de le faire autre que de créer une nouvelle classe avec deux listes.

Ce que je suis en fin de compte essaie de faire est d'avoir sur ma page d'accueil 10 articles commandés par date et 10 articles commandés par popularité.

Ce que j'ai

En fait, je suis allé avec une combinaison des deux réponses. Je fortement typées mon point de vue à la nouvelle classe I créé avec les deux listes. Je me suis alors fortement typé deux vues partielles à la chacune des listes. Peut sembler exagéré, mais je l'aime comment il est apparu.

Était-ce utile?

La solution

« la création d'une nouvelle classe avec deux listes » est le chemin à parcourir. Il est appelé un modèle de vue et une fois que vous l'embrasser, le pouvoir de vues fortement typées ouvre vraiment. Il peut être aussi simple:

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

Autres conseils

Il y a deux philosophies générales à ce sujet. La première consiste à prendre l'approche John Sheehan Stanted. Vous créez un modèle de vue personnalisée avec les deux listes et repasserez à votre point de vue fortement typé.

La seconde consiste à examiner les listes en tant que données « accessoires » et les mettre dans ViewData comme jeef3 déclaré. Mais, lorsque vous rendez les listes, vous utilisez un fortement typé partiel.

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

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

  

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.

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.

Vous devriez faire un modèle qui comprend les deux listes spécifiquement pour la vue.

En général, dans le petit MVC que je l'ai fait, je me suis fait un modèle pour chaque vue, même si elles viennent de passer le long des données identique qui a été servi par des données ou la couche d'affaires juste pour maintenir la séparation entre les deux parties très strictes. Cette configuration est un peu plus de travail et non nécessaire dans de nombreux cas simples mais il ne garde les choses plus propre à mon avis.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top