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

时间:2017-04-19 19:14:17

标签: asp.net-mvc ninject.web.mvc

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

表名 - JobDetails

JobId<PK>
LocationId<FK>
JobName

表名称 - 位置

LocationId<PK>
LocationName

我创建了位置和JobDetails的实体,如下所示

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; }
}

我还有我的工作细节和位置的抽象和上下文类,如下所示

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; }
    }
}

我的作业和位置模型类如下

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并试图创造新的东西。请让我知道我所做的是否正确。

1 个答案:

答案 0 :(得分:0)

添加了sleeyuen的回复。您可能需要向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

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

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

希望这会有所帮助:)