2011-03-23 4 views
0

je le modèle suivantAccès Modèle Objets

Modèle de voyage // penser domaine Grails classe

public long FerryId { set;get; } 
public long FromLocationId { set;get; } 
public long ToLocationId { set;get; } 

public Ferry Ferry { set;get; } 
public Location FromLocation { set;get; } 
public Location ToLocation { set;get; } 

Puis je retourne une liste à la vue et une boucle à travers les voyages:

@foreach (var item in Model) { 
    @item.FerryId //displays fine 
    @item.Ferry.FerryName //displays fine 
    @item.FromLocationId //displays fine 
    @item.FromLocation.LocationName //doesn't work 
    @item.ToLocationId //displays fine 
    @item.ToLocation.LocationName //doesn't work 
} 

Le problème est d'essayer de récupérer "item.ToLocation.LocationName" et même pour "item.FromLocation.LocationName"

Je suis confus sur pourquoi le Ferry.FerryName renvoie mais pas les autres.

Je suis totale newpie à C#/MVC3/Razor, mais dans les grails/groovy cela ne fonctionnerait pas de problème, des pensées? et des conseils supplémentaires généraux? grandement apprécié.

Répondre

1

Que voulez-vous dire « ne pas travail"? Y a-t-il un message d'erreur que nous pouvons diagnostiquer? Sans cela, je peux juste faire une supposition éclairée ... Je suppose que vous utilisez Entity Framework pour récupérer ces objets de modèle à partir d'une base de données et que FromLocation et ToLocation sont des références à une autre entité. Si c'est le cas, vous devez explicitement dire à EF de charger ces propriétés dans la base de données avant de passer le modèle à la vue. Il est assez facile ... il suffit d'ajouter .Include("FromLocation").Include("ToLocation") à votre requête LINQ pour récupérer des choses du contexte EF

Voir http://msdn.microsoft.com/en-us/library/bb896272.aspx pour plus d'informations sur cette technique de «chargement rapide» et d'autres options que vous avez pour le chargement d'entités connexes.

+0

Robert; vous avez raison, j'utilise Entity Framework/LINQ, je vais essayer votre solution et confirmer. Merci –

0

Il me semble juste ce qui me conduit à demander, quel est l'accesseur pour FromLocation/ToLocation.LocationName? Est-ce public?

Désolé, si elle est une question stupide, mais parfois thats le truc qui me fait ...

HTH,

\ ^/mal

+0

oui, c'est public, merci pour la réponse –

0

Je regardais la documentation et la requête n'a pas été le problème:

var trips = DB.Trips.Include("FromLocation").Include("ToLocation").ToList(); 

mais j'ai dû manualy ajouter les objets locaiton pour déclencher lors de l'enregistrement:

[HttpPost] 
public ActionResult Create(Trip trip) 
{ 
    var fromLocation = DB.Locations.Find(trip.FromLocationId); 
    var toLocation = DB.Locations.Find(trip.ToLocationId); 
    trip.FromLocation = fromLocation; 
    trip.ToLocation = toLocation; 
    if (ModelState.IsValid) 
    { 
     DB.Trips.Add(trip); 
     DB.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    else 
    { 
     return View(trip); 
    } 
} 

et maintenant je pouvais charger des objets imbriqués:

@item.ToLocation.LocationName 
@item.FromLocation.LocationName 

Quels casse-tête est dans le cas de l'objet Ferry je n'ai pas eu à l'ajouter manuellement!