从两个模型填充Razor视图

问题描述

我在MVC中使用实体框架。我有两个使用DBContext从sql表填充的模型

public class Incident
{
  
    public Guid IncidentKey { get; set; }
   
    public int IncidentID { get; set; }
}

public class Request
{           
        public Guid RequestKey { get; set; }
      
        public int RequestID { get; set; }
}

下面是我如何从sql提取数据

public class CallViewerDbContext : DbContext
{
    
    public DbSet<Incident> Incident { get; set; }
    public DbSet<Request> Request { get; set; }

}

public class sqlData : IIncident,IRequest
{
        private readonly CallViewerDbContext db;

        public sqlData(CallViewerDbContext db)
        {
            this.db = db;
        }}



 internal static void RegisterContainer(HttpConfiguration httpConfiguration)
        {

   var builder = new ContainerBuilder();

        builder.RegisterControllers(typeof(MvcApplication).Assembly);
        builder.RegisterapiControllers(typeof(MvcApplication).Assembly);
        builder.RegisterType<sqlData>()
                .As<IIncident>()                 
                .InstancePerRequest();
        builder.RegisterType<sqlData>()
               .As<IRequest>()
               .InstancePerRequest();       
        builder.RegisterType<CallViewerDbContext>().InstancePerRequest();

        var container = builder.Build();
        DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
        httpConfiguration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
}

我正在尝试创建一个新模型,当我将其放置在新的Razor视图上时,它将使我能够对实体的两个实体进行计数。我目前可以使用以下方法获得一个

 IIncident db;

    public HomeController(IIncident db)
    {
        this.db = db;
    }

    public ActionResult Index()
    {
        var model = db.IGetAll();
        return View(model);
    }

  public IEnumerable<Incident> IGetAll()
        {
        return db.Incident;
        }

我尝试制作新模型。

public class DataModel
{

    public List<Incident> allIncidents { get; set; }
    public List<Request> allRequests { get; set; }

}

我尝试将其添加注册容器中

 builder.RegisterType<sqlData>()
                  .As <IDataModel>()
                  .InstancePerRequest();

然后更新了Home控制器

    IDataModel db;

    public HomeController(IDataModel db)
    {
        this.db = db;
    }

    public ActionResult Index()
    {
        var model = db.MGetAll();
        return View(model);
    }

  public IEnumerable<Incident> MGetAll()
        {
        return db.Incident;
        }

我试图使用MGetAll方法返回数据以获取事件列表,然后我有了另一个对请求执行相同操作的方法。我试图先将单个计数返回到视图,然后在第二个中添加

我现在收到以下堆栈跟踪错误

传递到字典中的模型项的类型为'System.Data.Entity.DbSet 1[CallViewerData.Models.Incident]',but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [CallViewerData.Models.DataModel]'。

任何帮助将不胜感激。

解决方法

类似的事情应该起作用:

@media only screen and (min-width: 300px) and (max-width:650px) {
#icon {
max-width:100%;
max-height:100%;
}

您认为

public ActionResult Index()
{
    var model = PrepareViewModel();
    return View(model);
}

private DataModel PrepareViewModel()
{
    return new DataModel
    {
        allIncidents = db...,// Get Incidents
        allRequests = db... // Get Requests
    };
}

然后,您可以使用@model namespace.DataModel Model.allIncidents访问它们。