Заполнение выпадающего списка данными БД

#c# #asp.net-mvc #asp.net-mvc-3 #asp.net-mvc-4 #html.dropdownlistfor

#c# #asp.net-mvc #asp.net-mvc-3 #asp.net-mvc-4 #html.выпадающий список для

Вопрос:

Теперь мне удалось заставить это работать. Как и ожидалось, это было проще, чем я это делал. Надеюсь, это поможет спасти тех, кто захочет сделать то же самое когда-нибудь в будущем. Внесли изменения в приведенный ниже код, приведя его к рабочему коду.

Всем спасибо за помощь.

Частичный просмотр, возвращающий выпадающий список:

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

Ответ №1:

Я не знаю, не упускаю ли я чего-то в вашем коде, но я не вижу ни одного фрагмента кода, где вы заполняете ViewBag.Коллекция категорий. В документации второй параметр больше относится к наличию коллекции (IEnumerable) объектов SelectListItem, чем к наличию коллекции SelectList ваших объектов entity. Это вызывает проблему с заполнением выпадающего элемента управления.

Следующее, что я заметил, это то, что первым параметром (выражением) является выбор объекта категории — я считаю, что это невозможно сделать с помощью списка выбора, в котором хранятся только значение (ключ) и текст. Здесь следует использовать свойство integer с именем ‘selectedCategory’

Ответ №2:

проверьте этот код, он должен быть

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

также в контроллере установлен ViewBag.Категории со значениями вашей БД.