我想传递两个对象集合。首先是Post
,第二个是Gallery
。但是我收到错误,我不知道如何解决这个问题。
我在传递两个单个对象时已经完成了这个并且它工作正常,但现在我需要传递这些对象的两个集合并且它给了我错误。
错误
传递到字典中的模型项是类型的 “System.Tuple
2[System.Linq.IQueryable
1 [photoBlog.Models.Gallery],System.Linq.IQueryable1[photoBlog.Models.Post]]', but this dictionary requires a model item of type 'System.Tuple
2 [System.Collections.Generic.IEnumerable1[photoBlog.Models.Gallery],System.Collections.Generic.IEnumerable
1 [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
}
答案 0 :(得分: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,您将在从控制器方法返回之前强制查询命中数据库。
答案 1 :(得分:1)
您需要在domain.Model
中创建一个新实体这是我今天提供的一个例子:
MVC3: button to send both form (model) values and an extra parameter
后来编辑:
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方式
答案 2 :(得分:0)
试试这个
var posts = _db.Posts.OrderByDescending(x => x.DateTime).Take(4).ToList();
var galleries = _db.Galleries.OrderByDescending(x => x.ID).Take(4).ToList();