2016-10-24 25 views
-1

C#.netを学習しようとしていて、.netコアのすべての誇大宣伝と考えていますが、そこから始めようとしていますが、複数のクエリ結果が1つのビューで表示される

私は、データベースから(「国」と言う)リストを持っています。私は国をクリックすると、そのアイテムの詳細が表示されます。これは動作します:

// GET: Database/Details/00000000-0000-0000-0000-000000000000 
    public async Task<IActionResult> Details(Guid? id) 
    { 
     if (id == null) 
     { 
      return NotFound(); 
     } 

     var country = await _context.countries.SingleOrDefaultAsync(s => s.Id == id); 
     if (subscription == null) 
     { 
      return NotFound(); 
     } 

     return View(country); 
    } 

詳細ビューでは、2つのテーブルを表示します。

最初の「国」は、一般情報(資本、通貨、大陸)を表示します。私は現在、この罰金を科すことができます。

2番目の都市は「都市」という表からの都市のリストです。どうすればいい?私はビューに2番目の結果セットを返す方法を考えることができません。

は(アナロジーはそれを説明する助けを願って!)

答えて

3

あなたはViewModelにを返すようにする必要があります。

:次に、あなたのコントローラでモデルを返す

public class IndexViewModel 
{ 
    public Country Country { get; set; } 
    public List<City> Cities { get; set; } 
} 

:だからと2つのプロパティを追加します(これは、あなたが望むどのようにそれに名前を付けることができますだけのベストプラクティスである)クラスIndexViewModelまたはどのようにあなたのアクションが呼び出されたを作成あなたのビューで

// GET: Database/Details/00000000-0000-0000-0000-000000000000 
public async Task<IActionResult> Details(Guid? id) 
{ 
    if (id == null || subscription == null) 
    { 
     return NotFound(); 
    } 

    var model = new IndexViewModel(); 
    model.Country = await _context.countries.SingleOrDefaultAsync(s => s.Id == id); 
    model.Cities = SomeFunction(); 

    return View(model); 
} 

文書の上部に参照を追加します

@model IndexViewModel 

をそして、あなたがすることで、データにアクセスすることができます。

@Model.Country 
@Model.Cities 
+0

これは非常に役に立ちます。ありがとうございます! ViewModelは私が逃したビットだった、私は主に私は何をgoogleに確認していないと思う。詳しい答えをありがとう。 – eXplicit

+1

問題はありません、歓迎します。 –

3

をあなたはあなたの両方のリストを保存し、あなたのビューにそれを渡すために場所を与えるのViewModelを作成する必要があります。以下の例。

public class MyViewModel{ 
    public IEnumerable<Country> Countries { get; set; } 
    public IEnumerable<City> Cities { get; set; } 
} 
関連する問題