0

オブジェクトの 2 つのコレクションを渡したいです。1つ目はPost、2つ目はGalleryです。ただし、エラーが発生し、これを修正する方法がわかりません。

2 つの単一オブジェクトを渡すときにこれを行い、正常に動作していますが、これらのオブジェクトの 2 つのコレクションを渡す必要があり、エラーが発生します。

エラー

ディクショナリに渡されるモデル アイテムのタイプは、'System.Tuple 2[System.Linq.IQueryable1[photoBlog.Models.Gallery],System.Linq.IQueryable 1[photoBlog.Models.Post]]', but this dictionary requires a model item of type 'System.Tuple2[System.Collections.Generic.IEnumerable 1[photoBlog.Models.Gallery],System.Collections.Generic.IEnumerable1[photoBlog.Models.Post]]' です。

コントローラ

public ActionResult Index()
{
    photoBlogModelDataContext _db = new photoBlogModelDataContext();
    var posts = _db.Posts.OrderByDescending(x => x.DateTime).Take(4);
    var galleries = _db.Galleries.OrderByDescending(x => x.ID).Take(4);
    return View(Tuple.Create(galleries, posts));
}

意見

@model Tuple<IEnumerable<photoBlog.Models.Gallery>, IEnumerable<photoBlog.Models.Post>>
@foreach (var item in Model.Item1)
{
   @item.Name
}
4

3 に答える 3

4

コントローラメソッドを次のように変更する必要があると思います。

public ActionResult Index()
{
    photoBlogModelDataContext _db = new photoBlogModelDataContext();
    var posts = _db.Posts.OrderByDescending(x => x.DateTime).Take(4).ToArray();
    var galleries = _db.Galleries.OrderByDescending(x => x.ID).Take(4).ToArray();
    return View(Tuple.Create(galleries, posts));
}

エラーメッセージから、ビューがレンダリングされたときにクエリがまだ解決されていないようです。ToArrayまたはToListも実行すると、コントローラーメソッドから戻る前に、クエリがデータベースにヒットするように強制されます。

于 2012-05-31T15:41:27.093 に答える
1

domain.Model に新しいエンティティを作成する必要があります

今日提供した例を次に示します: MVC3: フォーム (モデル) 値と追加のパラメーターの両方を送信するボタン
後で編集:

namespace App.Domain.Model
{
    public class Tuple
    {
        public IEnumerable<photoBlog.Models.Gallery> Gallery{ get; set; }
        public IEnumerable<photoBlog.Models.Post> Post{ get; set; }
    }
}

次のように Tuple オブジェクトをビューに送信します。

@model: (Domain.Model.)Tuple  <--- (your exact model path )
@foreach (var item in Model.Gallery)
{
   @item.Name
}

別の可能性はビューバッグを使用することです...しかし、正しい方法、つまりMVCの方法で行うことを強くお勧めします

于 2012-05-31T15:28:24.360 に答える
0

これを試してみてください

var posts = _db.Posts.OrderByDescending(x => x.DateTime).Take(4).ToList();
var galleries = _db.Galleries.OrderByDescending(x => x.ID).Take(4).ToList();
于 2012-05-31T15:42:38.103 に答える