0

我想传递两个对象集合。一是Post,二是Gallery。但是我收到错误,我不知道如何解决这个问题。

我在传递两个单个对象时已经这样做了,它工作正常,但现在我需要传递这些对象的两个集合,它给了我错误。

错误

传入字典的模型项的类型为“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
}

另一种可能性是使用 viewbag ...但我强烈建议您以正确的方式进行操作,即 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 回答