为什么必须在视图中引用我的模型?

时间:2019-04-06 17:17:35

标签: c# asp.net-core entity-framework-core

我不知道这是EF核心问题还是Asp.Net Core 2问题。我只是想知道为什么我必须在此示例的视图(HelloNurse)的视图中引用我的Models目录。

我正在使用.Net Core 2.2。我还在单独的配置文件中使用Fluent API。最后,我使用了两个DbContexts。一个用于标识,EfficacyDbContext用于我的数据。哦。我也在使用Areas。

DbContext

namespace Efficacy.Data
{
    public class EfficacyDBContext : DbContext
    {
        public virtual DbSet<Contact> Contact { get; protected set; }
        public virtual DbSet<ContactType> ContactType { get; protected set; }
        public virtual DbSet<HelloNurse> HelloNurse { get; protected set; }

        public EfficacyDBContext(DbContextOptions options) : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.ApplyConfiguration(new ContactEntityTypeConfiguration());
            modelBuilder.ApplyConfiguration(new ContactTypeEntityTypeConfiguration());
        }
    }
}

型号

namespace Efficacy.Models.Entities
{
    public class HelloNurse
    {

        public int Id { get; set; }

        public string Hello { get; set; }
        public string Nurse { get; set; }
    }
}

控制器

namespace Efficacy.Areas.Ops.Controllers
{
    public class HelloNurseController : Controller
    {
        private readonly EfficacyDBContext _db;

        public HelloNurseController(EfficacyDBContext db)
        {
            _db = db;
        }
        public async Task<IActionResult> Index()
        {
            return View(await _db.HelloNurse.ToListAsync());
        }
    }
}

查看

@using Efficacy.Models.Entities @* <-Why do I have to include this reference?*@
@model IEnumerable<HelloNurse>
@{
    ViewData["Title"] = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
<h1>Index</h1>

我只是认为当我已经将DbContext传递给视图时,引用我的Models目录有点冗长。我想念什么吗?

1 个答案:

答案 0 :(得分:0)

而不是:

@using Efficacy.Models.Entities

@model IEnumerable<HelloNurse>

只需在类型声明中添加完全限定的名称空间:

@model IEnumerable<Efficacy.Models.Entities.HelloNurse>

视图需要知道模型的“类型”,为此,我们需要为它提供一个完全限定的名称空间。