none
El valor no puede ser nulo. Nombre del parametro: items ¡RESULETO! RRS feed

  • Pregunta

  • Hola a todos!

    Estoy trabajando con un proyecto en Asp.Net MVC y estoy creando un formulario con un DropDownListFor el cuál si me lista los valores pero al querer guardarlo en la BD me arroja ese error y ya llevo bastante tiempo intentando corregirlo. Ya intenté de todo y no encuentro en dónde estoy mal. ¡Agradecería mucho su ayuda!

    Éste es el código de mi Modelo (PerfilesViewModel)

    /// RESPUESTA ///

    Después de hacer de todo para que mi DropDownListFor guardara los registros al fin logre hacerlo, les dejo el código ya corregido por si a alguien le llega a servir. 

    public class PerfilViewModel
        {
            public int idPerfil { get; set; }
            public string descripcion { get; set; }
            public int idEstatus { get; set; }
            public IEnumerable<SelectListItem> Estatus { get; set; }
        }    

    Éste es el código de mi Controller (PerfilesController)

    OrganizacionEntities2 db = new OrganizacionEntities2();
    
    public ActionResult Create()
            {
                PerfilViewModel vm = new PerfilViewModel();
                
                if (Session["Usuario"] == null)
                {
                    return RedirectToAction("Index", "Login");
                }
                else
                {
                    ViewBag.Estatus = db.catEstatus.Select(x => new SelectListItem
                    {
                        Text = x.descripcion,
                        Value = x.idEstatus.ToString()
                    }).ToList();
    
                    return View(vm);
                }
            }
    
            [HttpPost]
            public ActionResult Create(PerfilViewModel vm)
            {
                if (ModelState.IsValid)
                {
                    try
                    {
                        using (OrganizacionEntities2 db = new OrganizacionEntities2())
                        {
                            db.catPerfiles.Add(new catPerfiles()
                            {
                                descripcion = vm.descripcion,
                                idEstatus = vm.idEstatus.idEstatus
                            });
                            db.SaveChanges();
                            ViewBag.successMessage = "Estatus agregado con exito";
                        }
                    }
                    catch (Exception ex)
                    {
                        ViewBag.successMessage = "Ocurrio un error, reintente por favor";
                    }
                }  
    
                ViewBag.Estatus = db.catEstatus.Select(x => new SelectListItem
                    {
                        Text = x.descripcion,
                        Value = x.idEstatus.ToString()
                    }).ToList();
    
               return View(vm);
            }

    Éste es el código de mi Vista (Create)

    @model AdministraZion.ViewModels.PerfilViewModel

    @using (Html.BeginForm("Create", "Perfiles", FormMethod.Post)) { <div class="box-body"> <div class="form-group"> <label for="inputDescripcion" class="form-control-label mt-3 ml-5">Descripción:</label> <input type="text" style="width:1130px" class="form-control ml-5" id="descripcion" name="descripcion"> </div> <div class="form-group"> <label for="inputEstatus" class="form-control-label ml-5">Estatus:</label> @Html.DropDownListFor(m => m.idEstatus, new SelectList(ViewBag.Estatus, "Value", "Text")) </div> </div> <div class="box-footer"> <button class="btn btn-default mb-3 ml-5">Cancelar</button> <button type="submit" class="btn btn-success mb-3">Crear</button> </div> </form> }





    • Editado MonsePM lunes, 7 de octubre de 2019 15:23 Problema Solucionado
    viernes, 4 de octubre de 2019 17:01

Todas las respuestas

  • hola

    si quieres recibir el dato seleccionado en el dropdownlist mapea simple la propiedad

        public class PerfilViewModel
        {
            public int? idPerfil { get; set; }
            public string descripcion { get; set; }
            public int idEstatus { get; set; }
            public IEnumerable<SelectListItem> Estatus { get; set; }
        }   

    entiendo que el value de status es numerico

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 4 de octubre de 2019 17:40
  • Hola, muchas gracias por la ayuda. Ya cambié lo que me comentabas y aún así me sigue saliendo ese error.
    viernes, 4 de octubre de 2019 18:29
  • Intenta asi,

    @model tuproyecto.Models.PerfilViewModel

    @using (Html.BeginForm("Create", "Perfiles", FormMethod.Post)) { <form class="form-horizontal" method="post" action="Create"> <div class="box-body"> <div class="form-group"> <label for="inputDescripcion" class="form-control-label mt-3 ml-5">Descripción:</label> <input type="text" style="width:1130px" class="form-control ml-5" id="descripcion" name="descripcion"> </div> <div class="form-group"> <label for="inputEstatus" class="form-control-label ml-5">Estatus:</label> @Html.DropDownListFor(m => m.idEstatus, new SelectList(Model.Estatus, "Value", "Text")) </div> </div> <div class="box-footer"> <button type="submit" class="btn btn-default mb-3 ml-5">Cancelar</button> <button type="submit" class="btn btn-success mb-3">Crear</button> </div> </form> }

    viernes, 4 de octubre de 2019 20:02
  • Por lo que veo, cambiaste ViewBag por Model en el DropDownListFor, ya lo cambié así pero ahora ni siquiera entra a mi vista "Create" y sigue mandando el mismo error.
    viernes, 4 de octubre de 2019 21:31
  • Ya vi, estas haciendo un form dentro de otro, debes eliminar el tag form, ya que begin form lo hace
    viernes, 4 de octubre de 2019 21:59
  • Ya lo eliminé pero aún no me permitía guardar. Aún así gracias por la respuesta. Ya logre solucionarlo.
    lunes, 7 de octubre de 2019 15:10