0

MVC4でドロップダウンメニューを作成しようとしています(Entity Framework、コードファースト)。私の目的は、クラスで価値を準備することです。これにより、コントロールページで追加のプログラミングを行う必要がなくなります。

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 Surname」のドロップダウンメニューを取得できますが、「Prefix.NameNameSurname 」が必要です。たとえば、「MrJohnDoe」などです。現在のコードはエラーを返します。

オブジェクト参照がオブジェクトのインスタンスに設定されていません。

どうやってするか?

4

2 に答える 2

2

Prefixモデルのプロパティを熱心に初期化したことを確認してください。

ViewBag.EmployeeID = new SelectList(
    db.People.Include(p => p.Prefix), 
    "PersonID", 
    "FullName", 
    personsalary.EmployeeID
);
于 2013-02-26T08:20:10.330 に答える
0

Peopleクラスで、プロパティPrefixを仮想としてマークします。これを行うと、この値にアクセスしようとしたときに、対応するプレフィックスの値がロードされます。

ダリンによって提案された答えも機能します。これは代替アプローチです。

于 2013-02-26T12:39:05.947 に答える