2016-08-29 14 views
0

ViewModelを使用して、LemQクエリを@modelを使用した表示に@model IEnumerable<MyWebProject.ViewModels.MyViewModel>として渡すことができます。 質問:しかし、1.次の例でView Modelを使用したくない場合はどうすればいいですか?2.その場合、@modelディレクティブは何ですか?ViewModelを使用せずにViewにLINQクエリを送信する方法

のViewModel

public class MyViewModel 
{ 
    public string CustomerName{ get; set; } 
    public int CustomerOrderNo{ get; set; } 
} 

コントローラー

public ActionResult Index() 
{ 
    MyViewModel vm= new MyViewModel(); 
    var vm = (from c in db.Customers 
      join o in db.Orders 
      select new { CustomerName = c.Name, CustomerOrderNo = o.OrderNo}).ToList(); 
      return View(vm); 
} 

ビュー

@model IEnumerable<MyWebProject.ViewModels.MyViewModel> 
@foreach (var item in Model) 
{ 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.CustomerName) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.CustomerOrderNo) 
     </td> 
    </tr> 
} 
+6

あなたはそれをやってはいけません、viewmodelを使用して、なぜそれを使いたくないのですか? –

+4

linq式は、匿名オブジェクトのコレクションを返します。ビューをバインドすることはできません。ビューモデル/ DTOを作成して使用する必要があります – Shyju

+0

厳密な不規則な状況がない場合、ハードコーディングされたビューモデルは常にビューを実装するのに適しています。 –

答えて

0

あなたはいつもできTupleを使用してください。

public ActionResult Index() 
{ 
    MyViewModel vm= new MyViewModel(); 
    var vm = (from c in db.Customers 
      join o in db.Orders 
      select new Tuple<string, int>(c.Name, o.OrderNo).ToList(); 
      return View(vm); 
} 

とビュー上:このよう

@model IList<Tuple<string, int>> 

あなたはこのようにそれにアクセスすることができます。

@foreach (var item in Model) 
{ 
    @Model.Item1 
} 

しかしは、PLEASEをそれをしないでください。

+0

あなたもそうです上記のIndex()メソッドで示したViewModelを使用します。 vmがYmVievModel()クラスのインスタンス変数ではなく、LINQクエリの変数ではないのですか? – nam

+0

@nam実際にはViewModelではありません。それは 'タプル' –

+0

私は参照してください - ありがとう。 'MyViewModel vm = new MyViewModel(); '行は使用されません。 – nam

関連する問題