Asp.net mvc 3 在ASP.NET MVC 3中访问传递给Razor视图的模型内的对象

Asp.net mvc 3 在ASP.NET MVC 3中访问传递给Razor视图的模型内的对象,asp.net-mvc-3,razor,viewmodel,Asp.net Mvc 3,Razor,Viewmodel,我的啤酒模型有一个brewery对象,但我在视图中时无法访问啤酒厂的属性。Intellisense似乎认为我可以访问brewery属性,但DisplayFor方法不打印任何内容 @model BeerRecommender.Models.Beer @{ ViewBag.Title = "Details"; } <h2>@Html.DisplayFor(model => model.Name)</h2> <fieldset> <legend&g

我的啤酒模型有一个brewery对象,但我在视图中时无法访问啤酒厂的属性。Intellisense似乎认为我可以访问brewery属性,但DisplayFor方法不打印任何内容

@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>
@model BeerRecommender.Models.Beer
@{
ViewBag.Title=“详细信息”;
}
@DisplayFor(model=>model.Name)
细节
Style:@Html.DisplayFor(model=>model.Style.Name)
Brewery:@Html.DisplayFor(model=>model.Brewery.Name)
这是啤酒课:

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; }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.ComponentModel.DataAnnotations;
使用BeerRecommender.Models.ViewModels;
命名空间BeerRecommender.Models
{
公家啤酒
{
[关键]
public int BeerID{get;set;}
公共i集合城市{get;set;}
公共ICollection标记{get;set;}
公共样式样式{get;set;}
公共字符串名称{get;set;}
公共酿酒厂酿酒厂{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; }
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.Mvc;
使用System.ComponentModel.DataAnnotations;
命名空间BeerRecommender.Models
{
公营啤酒厂
{
[关键]
public int BreweryID{get;set;}
公共字符串名称{get;set;}
公共i收集啤酒{get;set;}
公共城市城市{get;set;}
}
}

如何加载Beer类?如果这是来自say entity framework,则需要在加载代码中调用.Include(o=>o.Brewery)以包含该表。这假设为EF 4.1,否则需要.Include(“Brewery”)之类的字符串名称如果在4.0中有一个愚蠢的问题,但是你确定Brewery属性实际上是在Beer中设置的吗?这是我能看到它不显示的唯一原因。你是对的。当我在beerscontroller的details方法中查看Beer初始化后的自动时,只有字符串字段被初始化。语句如下“Beer-Beer=context.Beers.find(id);"我想我需要一些其他LINQ代码来包含其他属性。我不确定在哪里以及如何使用Adam建议的LINQ代码。请参阅我在上面写给Competable_tech的评论,看看这是否有意义。这很有效!它也适用于包含多个对象。我研究了如何正确创建LINQ查询,而不是使用sc这对我很有帮助,谢谢。