使用Db数据填充下拉框

时间:2014-07-06 21:44:14

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 html.dropdownlistfor

现在设法让这个工作。正如所料,它比我制作它简单。希望这可以挽救那些希望将来某个时间做同样事情的人。将下面的代码修改为工作代码。

感谢所有人的帮助。

部分视图返回下拉列表:

    @model Project.Models.Item

    @Html.DropDownListFor(m=>m.CategoryId,new    SelectList(ViewBag.CategoryList,"CategoryId","CategoryName"),"Select")

控制器:

    [HttpGet]
    public ActionResult Create()
    {
        ViewBag.CategoryList = db.Categorys.ToList();
        ViewBag.DesignerList = db.Designers.ToList();

        return View();
    }

项目型号:

 public class Item
 {

    public Item()
    {
        this.Images = new List<Image>();
    }

    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    [ScaffoldColumn(false)]
    public int ItemId { get; set; }

    public int CategoryId { get; set; }
    public int DesignerId { get; set; }
    public int ImageId { get; set; }

    [Required(ErrorMessage="Please Enter the Items Name ")]
    [StringLength(150,MinimumLength=2)]
    public string ItemName { get; set; }
    [Required(ErrorMessage = "Price Cannot be Negative ")]
    [Range(0,999999.99)]
    public decimal ItemPrice { get; set; }
    [StringLength(1000,MinimumLength=2)]
    public string ItemDescription { get; set; }
    [Range(4,22)]
    public int ItemSize { get; set; }

    //Files Being Uploaded by the User
    public HttpPostedFileBase[] Files { get; set; }

    public virtual Category Category { get; set; }
    public virtual Designer Designer { get; set; }

    public virtual List<OrderDetail> OrderDetails { get; set; }
    public virtual List<Image> Images { get; set; }
}

类别模型:

public class Category
  {

        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        [ScaffoldColumn(false)]
        public int CategoryId { get; set; }

        [Required(ErrorMessage="Must Supply a Category")]
        [StringLength(250,MinimumLength=1)]
        public string CategoryName { get; set; }
}

2 个答案:

答案 0 :(得分:1)

我不知道我的代码中是否遗漏了某些内容,但是我看不到任何代码填充ViewBag.Categories集合。 在documentation中,第二个参数更多地是关于具有SelectListItem对象的Collection(IEnumerable)而不是具有实体对象的SelectList集合。这会导致填充下拉控件时出现问题。

我注意到的下一件事是第一个参数(表达式)是选择Category对象 - 我认为使用仅存储Value(Key)和Text的select列表是不可能的。你应该在这里使用名为'SelectedCategory'

的整数属性

答案 1 :(得分:0)

检查此代码 它应该是

@Html.DropDownListFor(model=>model.Category.CategoryName,ViewBag.Categories as SelectList,"-- Select Category--")

也可以在控制器中设置ViewBag.Categories和您的数据库值。