2016-04-27 9 views
3

私は同様の質問を見つけようとしましたが、どれも自分のシナリオに一致しません。だから私はこれを新しい質問として掲示しています。複数のモデルから複数のリストを渡してコントローラから見る

モデル:

public class table1 
{ 
    public string name1 { get; set; } 
} 

public class table2 
{ 
    public string name2 { get; set; } 
} 

public class bothTable 
{ 
    public table1 table1 { get; set; } 
    public table2 table2 { get; set; } 
} 

コントローラー:

List<table1> list1 = //generate list from table1 
List<table2> list2 = //generate list from table2 

var model = ? 

return View(model); 

私はちょうど私がそれを渡すことができるように、モデルに出力リストの両方を渡す方法を必要とする私のモデルとコントローラは、以下のようになります。ビューに表示されます。明らかに、table1とtable2の両方に1つ以上のプロパティがあり、list1とlist2はLINQから生成されるため、複数の結果が得られます。

誰も私のモデルをどのように見えるようにして、両方のリストをビューに渡すことができますか?

私は、このリンクを参照のうえましたが、それは私のシナリオに正確に一致していません: http://forums.asp.net/t/1998033.aspx?Passing+multiple+Models+to+View+from+Controller

私もstackoverflowの中の他の類似の質問に査読しているが、私は望ましい結果を得ることができませんでした。

+0

結果を組み合わせた第3のモデルを作成する。yそのモデルをあなたのビューにバインドしてバインドします。 – techspider

答えて

8

あなたはビューに必要なすべての情報が含まれているのViewModelを作成する必要があります。

public class MyViewModel { 
    public List<table1> TheFirstTable {get;set;} 
    public List<table2> TheSecondTable {get;set;} 
} 

あなたはその後、

Model.TheFirstTable 

のようなモデルからの情報を盗んまたはforeachループでそれを使用することができますビューでこの

MyViewModel viewModel = new MyViewModel(); 
viewModel.TheFirstTable = //first table content 
viewModel.TheSecondTable = //second table content 
return View(viewmodel); 

のようにそれを埋めることができ

@foreach(var row in Model.TheFirstTable) { 
    //do something with the row 
} 
+0

Model.TheFirstTableは、MyViewModelにTheFirstTableの定義が含まれていないと言ってViewにエラーを表示しています。ページの上部に、 '@model List 'があります。 –

+0

MyViewModelをリストに入れる必要はありません。これらのリストはビューモデル内にあります。それで@model MyProject.Models.MyViewModel –

+0

すごい!ありがとう:) –

2

bothTableのモデルをList<table1> List<table2>に変更してください。たとえば:

public class table1 
{ 
    public string name1 { get; set; } 
} 

public class table2 
{ 
    public string name2 { get; set; } 
} 

public class bothTable 
{ 
    public List<table1> table1 { get; set; } 
    public List<table2> table2 { get; set; } 
} 

次に、あなたのモデルを生成します。

List<table1> list1 = //generate list from table1 
List<table2> list2 = //generate list from table2 

var model = new bothTable { table1 = list1, table2 = list2 }; 

return View(model); 
関連する問題