在视图中显示来自两个不同模型的数据

Displaying data from two different model in a view

我是从 book.I 学习 ASP.NET MVC 的新手,正在使用 NInject 实现 IoC。我已经为 Job 和 Location 创建了一个数据模型,如下所示

Table 姓名 - 职位详情

JobId<PK>
LocationId<FK>
JobName

Table 姓名 - 地点

LocationId<PK>
LocationName

我已经为 Location 和 JobDetails 创建了实体,如下所示

工作详情

public class JobDetails
{
    [Key]
    public int JOBID { get; set; }

    public int LocationID { get; set; }

    public string JOBNAME { get; set; }
}

位置

public class Location
{
    [Key]
    public int LocationID{ get; set; }

    public string LocationName { get; set; }
}

还有我的摘要和上下文 Class 工作详细信息和位置如下

public interface IJobDetails
{
    IEnumerable<JobDetails> jobDetailsInterface { get; }
}


public interface ILocation
{

    IEnumerable<Location> locationInterface { get; }
} 

public class EFLocationRepository : ILocation
{
    public  EFDbContext context = new EFDbContext();

    public IEnumerable<Location> locationInterface
    {
        get { return context.Location; }
    }
}

public class EFJobRepository : IJobDetails
{
    public EFDbContext context = new EFDbContext();

    public IEnumerable<JobDetails> jobDetailsInterface
    {
        get { return context.JobDetails; }
    }
}

我的工作和地点模型class如下

public class JobListViewModel
{
    public IEnumerable<JobDetails> jobDetails { get; set; }
}

public class LocationListViewModel
{
    public IEnumerable<Location> Location { get; set; }
}

在我的 JobDetail 控制器中,我想显示位置名称而不是位置 ID。 我的 JobDetail 控制器如下

public class JobController : Controller
{
    public IJobDetails repository;

    public JobController(IJobDetails job)
    {
        repository = job;
    }

    public ViewResult List()
    {
        return View(repository.jobDetailsInterface);
    }

}

如何在我的工作视图中显示位置名称而不是位置 ID?

N.B-我正在从 Adam Freeman 的书中学习 MVC 并尝试创建一些东西 new.Please 让我知道我所做的是否正确。

添加到 sleeyuen 的回复中。您可能希望将 "navigation" 属性 添加到 JobDetails 模型,如下所示:

public class JobDetails
{
    [Key]
    public int JOBID { get; set; }

    public int LocationID { get; set; }

    public string JOBNAME { get; set; }

    public virtual Location JobLocation { get; set; }
}

那么您应该可以通过以下方式从视图中访问位置名称:repository.jobDetailsInterface.JobLocation.LocationName

在您的场景中,我相信 entity framework 能够从模型结构中推断出关系,因此您不需要设置实体配置

请注意,这种方法会导致 N+1

希望这对您有所帮助:)