DropDownListFor()指定具有自引用表的父级

时间:2013-09-29 11:48:31

标签: c# asp.net entity-framework asp.net-mvc-4

在我的PageModels中,我有:

public class Page : BaseModel
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int PageID { get; set; }
    public int? ParentID { get; set; }
    public string Name { get; set; }

    public virtual Page Parent { get; set; }
    public virtual ICollection<Page> Children { get; set; }

    public Page()
    {
        this.Order = 0;
        this.Live = false; 
    }
}

public class CommodityPageMap : EntityTypeConfiguration<Page>
{
    public CommodityPageMap()
    {
        HasOptional(x => x.Parent)
            .WithMany(x => x.Children)
            .HasForeignKey(x => x.ParentID)
            .WillCascadeOnDelete(false);
    }
}

我希望能够做的是在我的视图中有一个下拉列表,当选择设置我的模型的ParentID时。我不确定如何使用与我的模型直接相关的DropDownListFor

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

设置ParentID只是一个整数,因此下拉列表中的值是可以正常工作的整数。

我想你真正问的问题是如何获得这个下拉列表中可能的整数列表?

您的模型应该有一个返回该列表的属性。像这样简单:

public IDictionary<int, string> PossibleParents
{
    get
    {
        // query the database for possible parents
        // return the list of IDs and names
    }
}

然后在您的视图中,您将使用该属性填充下拉列表:

@Html.DropDownListFor(x => x.ParentID, new SelectList(Model.PossibleParents, "Key", "Value"))