C# 带有ASP.NET MVC 4和EF的下拉菜单

C# 带有ASP.NET MVC 4和EF的下拉菜单,c#,.net,entity-framework,drop-down-menu,asp.net-mvc-4,C#,.net,Entity Framework,Drop Down Menu,Asp.net Mvc 4,我试图在MVC4(实体框架,代码优先)中创建下拉菜单。我的目标是在类中准备值,所以我不需要在控制页上进行额外的编程 public class Prefix { [Key] public int PrefixID { get; set; } [StringLength(20)] public string PrefixName { get; set; } } public class People { [Key] public int Person

我试图在MVC4(实体框架,代码优先)中创建下拉菜单。我的目标是在类中准备值,所以我不需要在控制页上进行额外的编程

public class Prefix
{
    [Key]
    public int PrefixID { get; set; }

    [StringLength(20)]
    public string PrefixName { get; set; }
}
public class People
{
    [Key]
    public int PersonID { get; set; }

    [StringLength(20)]
    public string FirstName { get; set; }

    [StringLength(20)]
    public string LastName { get; set; }

    [ForeignKey("PrefixID")]
    public Prefix Prefix { get; set; }

    [Required]
    public int PrefixID { get; set; }       

    public string FullName // this isn't working
    {
        get
        {
            return Prefix.PrefixName +" " + FirstName + " " + LastName;
        }    
    }
}

public class PersonSalary
{
    [Key]
    public int SalaryId { get; set; }
    //...

    [ForeignKey("EmployeeID")]
    public Person HEmployee {get;set;}

    public int EmployeeID { get; set; }
}
SalaryController中的代码:

ViewBag.EmployeeID = new SelectList(db.People, "PersonID", "FullName", personsalary.EmployeeID);
在SalaryController上,我可以获得值为“Name-姓氏”的下拉菜单,但我需要“Prefix.Name-姓氏”。例如“John Doe先生”等。当前代码返回错误:

对象引用未设置为对象的实例


怎么做

确保您已经急切地初始化了模型的
Prefix
属性:

ViewBag.EmployeeID = new SelectList(
    db.People.Include(p => p.Prefix), 
    "PersonID", 
    "FullName", 
    personsalary.EmployeeID
);

在People类中,将属性前缀标记为virtual。如果执行此操作,则在尝试访问此值时将加载相应前缀的值

达林建议的答案也会起作用。这是另一种方法