2009-08-14 13 views
5

Ich habe eine View stark in eine Item-Klasse eingetippt. In meinem Controller muss ich zwei verschiedene Listen senden. Gibt es einen einfacheren Weg dies zu tun, als eine neue Klasse mit zwei Listen zu erstellen.Asp.Net MVC - stark typisierte Ansicht mit zwei Listen desselben Typs

Was ich letztendlich versuche zu tun ist, habe auf meiner Homepage 10 Artikel nach Datum sortiert, und 10 Artikel nach Beliebtheit geordnet.

Was habe ich

Ich ging tatsächlich mit einer Kombination der beiden Antworten. Ich habe meine View stark in die neue Klasse eingetippt, die ich mit den beiden Listen erstellt habe. Ich habe dann zwei Teilansichten stark auf jede der Listen geschrieben. Kann wie Overkill aussehen, aber ich mag, wie es sich herausstellte.

Antwort

10

"Erstellen einer neuen Klasse mit zwei Listen" ist der Weg zu gehen. Es wird als Betrachtungsmodell bezeichnet und sobald Sie es annehmen, öffnet sich die Kraft stark typisierter Ansichten. Es kann so einfach sein:

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

Es ist, was John vorgeschlagen oder nicht eine stark typisierte Ansicht und das Hinzufügen von ihnen zu dem Bildschirmtextsystem mit:

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

Eine weitere Option stark typisierten Teilansichten würde.

1

Sie sollten ein Modell erstellen, das beide Listen speziell für die Ansicht enthält. In der kleinen MVC, die ich gemacht habe, habe ich ein Modell für jede Ansicht erstellt, auch wenn sie nur identische Daten weitergegeben haben, die von Daten oder Business-Schicht bedient wurden, nur um die Trennung zwischen den beiden Teilen sehr streng zu halten . Dieses Setup ist ein wenig mehr Arbeit und wird in vielen einfachen Fällen nicht benötigt, aber es hält meiner Meinung nach die Dinge sauberer.

4

Es gibt zwei allgemeine Philosophien dazu. Der erste ist, den Ansatz John Sheehans zu nehmen. Sie erstellen ein benutzerdefiniertes Ansichtsmodell mit beiden Listen und übergeben dieses an Ihre stark typisierte Ansicht.

Die zweite ist, die Listen als "zusätzliche" Daten zu betrachten und sie in ViewData wie jeef3 angegeben. Wenn Sie die Listen jedoch rendern, verwenden Sie einen stark typisierten Partialtyp.

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

Damit ich in der Hauptansicht bedeuten, würden Sie RenderPartial (...) nennen, aber passieren Sie in der Ansicht Datenschlüssel verwendet.

Und Ihr Teil würde wie folgt aussehen:

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

Dies gibt Sie dringend, den Zugriff auf diese Ansicht Daten aus Ihrem Teil eingegeben hat.

Verwandte Themen