2011-11-12 59 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

相关问题