2011-03-23 115 views
0

我有以下型號訪問模型對象

旅行型號//認爲Grails領域類的

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; } 

然後我返回一個列表視圖,並通過旅行循環:

@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 
} 

問題是試圖獲取「item.ToLocation.LocationName」和「item.FromLocation.LocationName」相同

我很困惑爲什麼Ferry.FerryName會返回而不是其他人。我是新的C#/ MVC3/Razor,但在grails/groovy這將不會工作, 任何想法?和額外的一般建議? 非常感謝。

回答

1

你是什麼意思「不工作」?是否有我們可以診斷的錯誤信息?

沒有這一點,我可以做一個有根據的猜測...我猜你正在使用實體框架從數據庫中檢索這些模型對象,並且FromLocation和ToLocation是對另一個實體的引用。如果這是正確的,那麼在將模型傳遞給視圖之前,您需要明確指示EF從數據庫加載這些屬性。這很容易......只需在您的LINQ查詢中添加.Include("FromLocation").Include("ToLocation")即可從EF環境中檢索內容

有關此「加載」技術和其他加載相關實體的其他選項的更多信息,請參閱http://msdn.microsoft.com/en-us/library/bb896272.aspx

+0

Robert;你是對的,我使用實體框架/ LINQ,我會嘗試你的解決方案並確認。謝謝 – 2011-03-23 17:02:56

0

它看起來是正確的,這導致我問,什麼是FromLocation/ToLocation.LocationName的訪問器?它是公開的嗎?

對不起,如果這是一個愚蠢的問題,但有時這就是那個讓我的東西...

心連心,

\^/生病

+0

是的,它是公開的,謝謝你的回答 – 2011-03-23 16:35:58

0

我看了看文檔和查詢是沒有問題的:

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

但我必須manualy添加locaiton對象上節省行程:

[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); 
    } 
} 

,現在我可以加載嵌套對象:

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

什麼困惑我是在渡輪對象的情況下我不必添加它手動!