我在SO上读过类似的问题,但似乎无法弄清楚这个问题,这是DBContext对象特有的(我认为).这里有一些虚拟代码来说明.
我的Index()操作中有以下代码:
public ActionResult Index() { AnimalDBContext db = new AnimalDBContext(); return View(db.Dogs); }
我的模型有以下代码:
public class Dog { public int ID { get; set; } public string name { get; set; } public string breed { get; set; } } public class AnimalDBContext : DbContext { public DbSet<Dog> Dogs { get; set; } }
在我看来,我有以下几点:
@model IEnumerable<AnimalProject.Models.Dog> @foreach (var d in Model) { <h3>@d.name</h3> <h2>@d.breed</h2> }
一切都很好,视图将循环遍历我的数据库中的每只狗.但是,我在同一视图中有另一组我想要的DBContext数据.我希望能够枚举数据库中该表的每个项目.
这就是我想要的,如果你抓住我的漂移:
@model IEnumerable<AnimalProject.Models.Dog> @model IEnumerable<AnimalProject.Models.Cat> @foreach (var d in Dog) { <h3>@d.name</h3> <h2>@d.breed</h2> } @foreach (var c in Cat) { <h3>@c.name</h3> <h2>@c.breed</h2> }
我已经尝试将这些类组合在一起并使用局部视图,但显然你不能在局部视图中使用不同的模型,因为我总是收到错误消息:
“The model item passed into the
dictionary is of type
‘System.Data.Entity.DbSet1[AnimalProject.Models.Dog]',
1[AnimalProject.Models.Cat]’.”
but this dictionary requires a model
item of type
'System.Collections.Generic.IEnumerable
解决方法
那么创建自定义视图模型类:
public AnimalModel { public IEnumerable<Dog> Dogs { get; set; } public IEnumerable<Cat> Cats { get; set; } }
在Index中填充此模型并将其传递给期望AnimalModel而不是enumerables的视图.
编辑:
填充模型:
public ActionResult Index() { using (var db = new AnimalDBContext()) { var model = new AnimalModel { Dogs = db.Dogs.ToList(),Cats = db.Cats.ToList() }; return View(model); } }
查看(我从未使用过剃刀,所以我希望这是正确的):
@model AnimalProject.Models.AnimalModel @foreach (var d in Model.Dogs) { <h3>@d.name</h3> <h2>@d.breed</h2> } @foreach (var c in Model.Cats) { <h3>@c.name</h3> <h2>@c.breed</h2> }