Как создать представление редактирования с выпадающим списком

У меня есть следующие сущности:

 public class Entidad
    {
        [Key]
        public int Id { get; set; }
        public string Nombre { get; set; }

        public virtual ICollection<Propiedad> Propiedades { get; set; }
}




 public class Propiedad
    {
        [Key]
        public int Id { get; set; }

        public virtual Entidad Entidad { get; set; }

        public string Codigo { get; set; }
        public string Nombre { get; set; }
        public string TipoDeDatos { get; set; }
    }

и в моем представлении редактирования

 <div class="form-group">
                            @Html.LabelFor(model => model.Entidad, new { @class = "control-label col-md-2" })
                            <div class="col-md-10">
                                @Html.DropDownListFor(m => m.Entidad.Id, (SelectList)(ViewBag.EntidadList), "Seleccionar", new { @class = "form-control" })
                            </div>
                        </div>

Однако я получаю эту ошибку в представлении

Элемент ViewData с ключом «Entidad.Id» имеет тип «System.Int32», но должен иметь тип «IEnumerable». Описание

мои контроллеры:

      // GET: /GlobalAdmin/Propiedades/Create
        public ActionResult Create()
        {
            ViewBag.EntidadList = new SelectList(db.Entidades, "id", "nombre");
            return View();
        }


   public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }


            Propiedad propiedad = db.Propiedades.Find(id);
            if (propiedad == null)
            {
                return HttpNotFound();
            }
            return View(propiedad);
        }

person Luis Valencia    schedule 12.06.2015    source источник
comment
Вы можете показать определение ViewBag.EntidadList?   -  person DanielVorph    schedule 12.06.2015
comment
не могли бы вы поместить запрос для ViewBag.EntidadList   -  person DarkVision    schedule 12.06.2015
comment
Причина, по которой вы получаете эту ошибку, заключается в том, что ViewBag.EntidadList равно null. В методе Edit() вы не присваиваете SelectList ViewBag.EntidadList. Вам нужно сделать это согласно вашему методу Create().   -  person    schedule 13.06.2015


Ответы (2)


Вы можете использовать следующий код.

Метод действия:

        // GET: /GlobalAdmin/Propiedades/Create
        public ActionResult Create()
        {
           ViewBag.EntidadList = 
           new SelectList(_db.Entidades.ToList().
           Select(x => new { id= x.Id, nomber= x.Nombre }), "Id", "nombre "); // Viewbag
           return View();
        }

На странице просмотра:

     <div class="form-group">
          @Html.LabelFor(model => model.Entidad, new { @class = "control-label col-md-2" })
           <div class="col-md-10">
              @Html.DropDownListFor(m => m.Entidad.Id, ViewBag.EntidadList as SelectList, "Seleccionar", new { @class = "form-control" })
          </div>
    </div>

Если вы хотите использовать раскрывающийся список в режиме редактирования и выбрать элемент из базы данных, вы можете использовать следующий код:

        // GET: /GlobalAdmin/Propiedades/Create
        public ActionResult Edit(int? id)
        {
           if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }


        Propiedad propiedad = db.Propiedades.Find(id);
        if (propiedad == null)
         {
            return HttpNotFound();
         }
        ViewBag.EntidadList = 
           new SelectList(_db.Entidades.ToList().
           Select(x => new { id= x.Id, nomber= x.Nombre }), "Id", "nombre ",you must get id from Entidad and set here ); // Viewbag
        return View(propiedad);
        }

На странице редактирования:

     <div class="form-group">
          @Html.LabelFor(model => model.Entidad, new { @class = "control-label col-md-2" })
           <div class="col-md-10">
              @Html.DropDownListFor(m => m.Entidad.Id, ViewBag.EntidadList as SelectList, "Seleccionar", new { @class = "form-control" })
          </div>
    </div>

Я надеюсь, что это поможет вам.

person Omid Nasri    schedule 12.06.2015

У вас неправильный тип для ViewBag.EntidadList, он должен быть IEnumerable<SelectListItem>. Я не понимаю, как вы его строите, но в качестве примера вы можете построить его в своем контроллере следующим образом:

var selectListItems = new List<SelectListItem>();

selectListItems.AddRange(
    someList.Select(item => new SelectListItem
    {
        Text = item.Name,
        Value = item.Id.ToString()
    }));
ViewBag.EntidadList = selectListItems;
person Mister Epic    schedule 12.06.2015
comment
Пожалуйста, проверьте обновление, создав его следующим образом: ViewBag.EntidadList = new SelectList(db.Entidades, id, nombre); - person Luis Valencia; 12.06.2015