2011-11-12 5 views
0

私のビールモデルには醸造物オブジェクトがありますが、私がビューにいるときにビール醸造所のプロパティにアクセスすることはできません。 Intellisenseは私が醸造所のプロパティにアクセスできると思っていますが、DisplayForメソッドは何も印刷しません。ASP.NET MVC 3のレイザービューに渡されたモデル内のオブジェクトへのアクセス

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

...と、ここでビールのクラスである:ここで

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

あなたは正しいです。 beerscontrollerの詳細メソッドでビールが初期化された後に自動車を見ると、文字列フィールドだけが初期化されます。この声明は「Beer beer = context.Beers.find(id);」と読みます。私は他のプロパティを含めるためにいくつかの他のLINQコードが必要だと思います。 Adamが提案しているLINQコードをどこでどのように使用するかはわかりません。 – travis1097

答えて

2

はどのようにビールのクラスをロードしていますか?これがエンティティフレームワークからのものであれば、そのテーブルをインクルードするためにコードを読み込む際に.Include(o => o.Brewery)を呼び出す必要があります。これはEF 4.1と仮定しています。それ以外の場合は、4.0の場合は.Include( "Brewery")のような文字列名が必要です。

+0

上記のcompetent_techに書いたコメントを参照してください。 – travis1097

+0

最後に.Includeを追加 –

+0

それはうまくいった!それは複数のオブジェクトを含むためにも機能します。スカッフォールドされたクエリを使用する代わりにLINQクエリを正しく作成する方法を検討しました。ありがとう。 – travis1097

関連する問題