2016-04-14 6 views
0

MVC 6とEFコードの最初のデザインを使用してネストされたリストを表示しようとしています。私はMVCを使い始めるのにこのTutorialを使用しており、別のレベルに持っていくことを試みています。ネストされたリストを表示してMVCパターンを維持する方法は?

クラス:

public class Location 
{ 
    [Key] 
    public int ID { get; set; } 
    public string LocationName { get; set; } 
    public ICollection<SubLocation> Sublocations { get; set; } 
    } 
} 

public class SubLocation 
{ 
    public int ID { get; set; } 
    public string SubLocationName { get; set; } 
} 

が正しく私のEFデータベースを設定し、SubLocationLocationIDへの外部キーを割り当てdnx ef database update実行します。

enter image description here


今、私は次の画像のように、各場所の下にサブ場所を表示したいです。ユーザーは、新しい場所または場所に関連付けられたサブ場所を追加できます。場所のリストを表示する

enter image description here


単純です:return View(_context.Location.ToList());

は、サブロケーションのネストされたリストを表示するには、私は、コントローラやビューで作業を行う必要がありますか?

私はちょうど、次のようなビューを使用することができます望んでいたがitem.Sublocationsたデータベース内のデータがあるので、私はよく分からない理由でnullです:

@foreach (var item in Model) { 
    <tr> 
    <td>@Html.DisplayFor(modelItem => item.LocationName)</td> 
    </tr> 

    @foreach (SubLocation itm in item.Sublocations) 
    { 
    <tr> 
     <td>@itm.SubLocationName</td> 
    </tr> 
    } 
} 

私はコントローラでクエリを作成しようとしましたが、外部キーは比較できません。

var test = (from m in _context.SubLocation 
      where m.LocationID == curLocID <-- m.LocationID isn't available 
      select m.SubLocationName 
      ).ToList(); 

私がLocationIDを使用することができたとしても、現在の位置(curLocID)をビューからコントローラに送り返す方法はわかりません。私はヘルパーメソッドが必要だと思いますが、私はサークルに入るようになっています。

メインクラスのサブクラスから適切なMVCを維持し、ネストされたリストを表示するにはどうすればよいですか?

答えて

1

Locationテーブルの外部キーとなるSubLocationクラスにLocationIDプロパティを追加することを検討する必要があります。

public class SubLocation 
{ 
    public int ID { get; set; } 
    public string SubLocationName { get; set; } 
    public int LocationID { set;get;} 
} 

ここで、位置をクエリします。場所にはSubLocationsというプロパティがあるため、ビューは正常に動作するはずです。

var locations = _context.Locations.Include(s=>s.SubLocations).ToList(); 
return View(locations); 
+1

これはうまくいっていて、私はそれがどのようにクリーンであるか好きです。私は別の方法でデータを取得しようとしていましたが、私はメインビューでそれを渡すことができませんでした。電球の瞬間。ありがとう! –

関連する問題