从两个模型填充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();

然后更新了家庭控制器

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.DbSet1[CallViewerData.Models.Incident]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1[CallViewerData.Models.DataModel]"。

如有任何帮助,我们将不胜感激。

这样的东西应该可以工作:

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.allIncidentsModel.allRequests访问它们。

相关内容

  • 没有找到相关文章