2017-01-24 1 views
0

タプルを4人のメンバーでViewに渡したいと思います。ASP.net MVC - タプルメンバーとして表示するリストを渡す

コントローラー:

PGOrders pGOrder = db.PGOrders.Find(id); 
    int imgID = pGOrder.imageID; 
    PGOrderImages pGorderImages = db.PGOrderImages.Find(imgID); 
    PGAccountDatas account = db.PGAccountDatas.Where(a => a.PGAccountDataID == pGOrder.ordererID).FirstOrDefault(); 
    var offs = db.PGOffers.Where(o => o.orderID == pGOrder.PGOrderID); 

return View(Tuple.Create(pGOrder, pGorderImages, account, offs)); 

ビュー:

@using projectname.Models 
@model Tuple<PGOrders, PGOrderImages, PGAccountDatas, IQueryable<PGOffers>> 

     @foreach (var item in Model.Item4){ 
      <text><p> some item property</p></text> 
     } 

問題は、foreachループに沿ったものです。

Exception Details: System.InvalidCastException: Object must implement IConvertible. 

私は IEnumerable<PGOffers> ためvar offs = db.PGOffers.Where(o => o.orderID == pGOrder.PGOrderID).ToList();

とビューの変更で IQueryable<PGOffers>var offs = db.PGOffers.Where(o => o.orderID == pGOrder.PGOrderID);
を変更しようとしましたが、そのdidntのヘルプ。

pGOrder、pGorderImages、accountは指定されたクラスオブジェクトです。

質問は次のとおりです。

タプルのメンバーとしてクラスオブジェクトのリストを渡す方法は?あなたは以下のように、列挙に変換する必要があります

+0

var offs = db.PGOffers.Where(o => o.orderID == pGOrder.PGOrderID).AsEnumerable(); 

、その後はにあなたのモデルを設定します。オフとは何ですか? PGOffersとは何ですか?あなたのモデルで特異項目が複数あるのはなぜですか(単一のPGOffersはPGOfferではなくPGOfferです)。 –

+1

必要な属性を持つビューモデルを作成し、コントローラに入力してビューに渡すことを強くお勧めします。この方法論は、長期的にはるかに維持しやすいでしょう。 – nurdyguy

+1

なぜこのタプルの狂気を避け、必要なすべてのデータを保持するモデルクラスを作成し、それを使って作業しますか?シンプルはいつもより良いですね?ああ、あなたのモデルでIQueryableを避けてください、それはデータではありません。 –

答えて

0

:あなたは、関連する情報が含まれていませんでした

@model Tuple<PGOrders, PGOrderImages, PGAccountDatas, IEnumerable<PGOffers>> 
+0

は私がしかしライン上で、それを変更: ' @foreach(Model.Item4中のvarアイテム) ' はまだエラーが表示されます。 '例外の詳細:System.InvalidCastExceptionのを:オブジェクトが実装しなければなりませんIConvertible.' – vlan99

関連する問題