#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.Категории со значениями вашей БД.