2009-01-07 6 views
2

Par exemple: Supposons que je souhaite retourner un afficher qui affiche une liste de voitures et également afficher une section de revendeurs dans votre région. Ce sont deux éléments de données disjoints.MVC View Inheritance

Ma vue hérite d'une liste des voitures comme les suivantes:

public partial class CarLot : ViewPage<List<Cars>> 
{ 

} 

maintenant du contrôleur je peux retourner la vue comme ce qui suit:

return View(Model.GetCars()); 

Pour rendre ceci, mon balisage ressemblerait à ceci:

<% foreach (Car myCar in ViewData.Model) 
{some html here} 
%> 

Cela s'occupe de la liste des voitures, mais ma question est, comment puis-je gérer la liste des concessionnaires? Est-ce que le afficher soutenir l'héritage multiple ou vais-je devoir frapper le modèle à nouveau former le balisage? Je sais que cela peut être fait de cette façon, mais je ne suis pas sûr que ce soit la meilleure pratique.

Répondre

18

Créer un objet de transfert de données

public class CarLotViewModel 
{ 
    public List<Car> Cars { get; set; } 
    public List<Dealer> NearbyDealers { get; set; } 
} 

Définir votre vue d'utiliser le modèle de vue:

public partial class CarLot : ViewPage<CarLotViewModel> 
{  
} 

Ensuite, dans votre contrôleur:

CarLotViewModel model = new CarLotViewModel(); 
model.Cars = GetCars(); 
model.NearbyDealers = GetDealers(); 
return View(model); 

Puis Dénombrer chaque collection dans votre vue:

<% foreach (Car car in ViewData.Model.Cars) { %> 
.... 
<% foreach (Dealer dealer in ViewData.Model.NearbyDealers) { %> 
+0

est une classe partielle publique CarLot: ViewPage {} est équivalent à @model CarLotViewModel? – mishap

0

Définissez votre point de vue d'utiliser le modèle de vue:

public partial class Carlot: ViewPage {}

Il n'y a pas de code-behind dans MVC 1.0. Comment définissez-vous l'affichage pour utiliser le modèle de vue?

+0

C'est un ASPX. Le code-behind est autorisé, bien que découragé car il viole les idéaux de séparation entre Controller et View. – yfeldblum

+0

Eh bien, je n'utilise pas le code derrière. Mais dans Preview et Beta, l'héritage ViewPage est par défaut le code derrière la page. Maintenant, pour une vue fortement typée, cela se produit dans le balisage. Dans la version 1.0, cela ressemblerait à ceci: Inherits = "System.Web.Mvc.ViewPage " dans le balisage de la page. –