加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何在ASP.NET MVC的一个视图中使用多个模型?

发布时间:2020-12-16 04:18:01 所属栏目:asp.Net 来源:网络整理
导读:我在SO上读过类似的问题,但似乎无法弄清楚这个问题,这是DBContext对象特有的(我认为).这里有一些虚拟代码来说明. 我的Index()操作中有以下代码: public ActionResult Index() { AnimalDBContext db = new AnimalDBContext(); return View(db.Dogs); } 我的
我在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]',
but this dictionary requires a model
item of type
'System.Collections.Generic.IEnumerable
1[AnimalProject.Models.Cat]’.”

那么,我如何在我的视图中使用多个模型,这两个模型都从数据库中的不同表中获取我想要的数据?

解决方法

那么创建自定义视图模型类:
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>
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读