2011-11-12 58 views
0

我的啤酒模型有一個啤酒對象,但當我處於視圖中時,我無法訪問啤酒廠的屬性。智能感知似乎認爲我可以訪問brewery屬性,但DisplayFor方法不會打印任何內容。訪問ASP.NET MVC 3中傳遞給Razor視圖的模型內的對象

@model BeerRecommender.Models.Beer 

@{ 
ViewBag.Title = "Details"; 
} 

<h2>@Html.DisplayFor(model => model.Name)</h2> 

<fieldset> 
<legend>Details</legend> 

<div class="display-label">Style: @Html.DisplayFor(model => model.Style.Name)</div> 
<div class="display-label">Brewery: @Html.DisplayFor(model => model.Brewery.Name)</div> 

</fieldset> 

下面是啤酒類:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.ComponentModel.DataAnnotations; 
using BeerRecommender.Models.ViewModels; 

namespace BeerRecommender.Models 
{ 
public class Beer 
{ 
    [Key] 
    public int BeerID { get; set; } 

    public ICollection<City> Cities { get; set; } 

    public ICollection<Tag> Tags { get; set; } 

    public Style Style { get; set; } 

    public string Name { get; set; } 

    public Brewery Brewery { get; set; } 
} 

...這裏是啤酒類:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.ComponentModel.DataAnnotations; 

namespace BeerRecommender.Models 
{ 
public class Brewery 
{ 
    [Key] 
    public int BreweryID { get; set; } 

    public string Name { get; set; } 

    public ICollection<Beer> Beers { get; set; } 

    public City City { get; set; } 
} 
} 
+1

愚蠢的問題,但你確定釀酒廠屬性實際上是在啤酒中設置?這是我看不到它的唯一原因。 –

+0

你說得對。當我在啤酒控制器的細節方法中初始化啤酒後查看汽車時,只有字符串字段被初始化。該聲明顯示「Beer beer = context.Beers.find(id);」我想我需要一些其他的LINQ代碼來包含其他屬性。我不確定在哪裏以及如何使用Adam建議的LINQ代碼。 – travis1097

回答

2

你是如何加載啤酒類?如果這來自實體框架,則需要在加載代碼中調用.Include(o => o.Brewery)以包含該表。這是假設EF 4.1,否則你需要像.Include(「啤酒廠」)的字符串名稱,如果在4.0

+0

請參閱我寫給上述competent_tech的評論,看看這是否有道理。 – travis1097

+0

在末尾添加.Include –

+0

工作正常!它也適用於包含多個對象。我研究了正確創建LINQ查詢,而不是使用腳手架查詢,這有所幫助。謝謝。 – travis1097

相關問題