none
No hay ningún elemento ViewData de tipo 'IEnumerable <SelectListItem>' que tenga la clave 'Conve' RRS feed

  • Pregunta

  • Estoy realizando un ajuste a una aplicación y al realizar un UPDATE. Me arroja el siguiente error:

    There is no ViewData item of type 'IEnumerable' that has the key 'Conve'

    Mi DropDownList me carga los datos perfectamente pero cuando selecciono cualquiera de esa lista para utilizar su valor y cambiarlo por el valor que esta en mi BD arroja ese error

    ANEXO Modelo: TableAsign.cs

    public class TableAsign
    {
        public long IdCliente { get; set; }
        public string nombre { get; set; }
       
    }

    Anexo Controlador: MastController.cs 

    [Authorize]
        public ActionResult Asign_Conv(int idUsuario)
        {
            List<Models.TableAsign> lst = null;
            using (TPConveniosEntities db = new TPConveniosEntities())
            {
                lst = (from d in db.Cliente
                       orderby d.nombre
                       select new TableAsign
                       {
                           IdCliente = d.idCliente,
                           nombre = d.nombre
                       }).ToList();
            }
            List<SelectListItem> items = lst.ConvertAll(d =>
            {
                return new SelectListItem()
                {
                    Text = d.nombre.ToString(),
                    Value = d.IdCliente.ToString(),
                    Selected = false
                };
            });
    
            ViewBag.items = items;
    
            using (TPConveniosEntities db = new TPConveniosEntities())
            {   Usuario user = db.Usuario.FirstOrDefault(u => u.idUsuario == idUsuario);
                return View(user);
            }
          }

    En Esta parte realiza el UPDATE y me parece que tiene que ver cuando traigo con mi variable long el value de mi DropDownList, el me arroja el error y luego cuando consulto mi BD veo que si realiza el UPDATE pero dándome ese error

    [Authorize]
        [HttpPost]
        public ActionResult Asign_Conv(FormCollection collection)
        {
            using (TPConveniosEntities contexto = new TPConveniosEntities())
            {   var idUsuario = Convert.ToInt32(collection["IdUsuario"].Trim());
                Usuario user = contexto.Usuario.FirstOrDefault(u => u.idUsuario == idUsuario);
    
                var userName = collection["usuario"].Trim();
                long IdCliente = Convert.ToInt32(collection["Convenio"].Trim());
    
                user.userName = userName;
                user.idCliente = IdCliente;
    
                contexto.SaveChanges();
                return View(user);
            }
        }

    ANEXO VISTA: Asign_Conv.cshtml

    @using TPConvenios.App_Data;
    @model Usuario
    @{
        Layout = null;
        AjaxOptions ajaxOpciones = new AjaxOptions
        {
            UpdateTargetId = "cuerpoPopUpGenerico2",
            InsertionMode = InsertionMode.Replace,
            OnSuccess = "OnSuccess_Asign",
            OnFailure = "OnFailure"
        };
        List<SelectListItem> items = (List<SelectListItem>)ViewBag.items;
    }
    <div id="contenedor" style="margin: 15px 30px">
        @using (Ajax.BeginForm("Asign_Conv", "Mast", null, ajaxOpciones, new { id = "Asign_Conv" }))
        {   @Html.ValidationSummary(true);
            <input type="hidden" name="idUsuario" id="idUsuario" value="@(null != Model ? Model.idUsuario : 0)" />
            <p>
            Usuario:   <input name="usuario" type="text" id="usuario" class="usuario" placeholder="Usuario" value="@(null != Model ? Model.userName : String.Empty)"  readonly />
            </p>
            <p>
            Convenio: @Html.DropDownList("Convenio", items, "Seleccione el Convenio", new { @class = "form-control" })
            </p>
            <p id="bot">
            <input name="submit" type="submit" id="submit" value="Asignar" class="botonNuevo" style="float: right" />
             </p>
         }
    </div>

    Agradezco la ayuda que puedan brindarme para solventar el error






    • Editado Harrison B martes, 13 de abril de 2021 18:46
    lunes, 12 de abril de 2021 20:12

Respuestas

  • Logre solventar mi problema trayéndome el código con que cargo mi DropdownList, y pegándolo al POST donde realiza UPDATE.

    quedando de esta manera

    [Authorize]
        [HttpPost]
        public ActionResult Asign_Conv(FormCollection collection)
       {
            using (TPConveniosEntities contexto = new TPConveniosEntities())
            {
                var idUsuario = Convert.ToInt32(collection["IdUsuario"].Trim());
                Usuario user = contexto.Usuario.FirstOrDefault(u => u.idUsuario == idUsuario);
    
                var userName = collection["usuario"].Trim();
                long IDCliente = Convert.ToInt32(collection["Conve"].Trim());
               
                /*********** ESTO FUE LO QUE COPIE PARA QUE FUNCIONARA **********/
                
                    List<Models.TableAsign> lst = null;
                    using (TPConveniosEntities db = new TPConveniosEntities())
                    {
                        lst = (from d in db.Cliente
                               orderby d.nombre
                               select new TableAsign
                               {
                                   IdCliente = d.idCliente,
                                   nombre = d.nombre
                               }).ToList();
                    }
                    List<SelectListItem> items = lst.ConvertAll(d =>
                    {
                        return new SelectListItem()
                        {
                            Text = d.nombre.ToString(),
                            Value = d.IdCliente.ToString(),
                            Selected = false
                        };
                    });
                    ViewBag.items = items;
    
                   /***************************   HASTA AQUI   **********************/
                    user.userName = userName;
                    user.idCliente = IDCliente;
                    contexto.SaveChanges();
     
                    return View(user);
                }
            }

    Espero le sirva a alguien

    • Marcado como respuesta Harrison B jueves, 15 de abril de 2021 11:50
    miércoles, 14 de abril de 2021 19:39

Todas las respuestas

  • Hola,

    Gracias por levantar tu consulta en los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    lunes, 12 de abril de 2021 22:38
    Moderador
  • Logre solventar mi problema trayéndome el código con que cargo mi DropdownList, y pegándolo al POST donde realiza UPDATE.

    quedando de esta manera

    [Authorize]
        [HttpPost]
        public ActionResult Asign_Conv(FormCollection collection)
       {
            using (TPConveniosEntities contexto = new TPConveniosEntities())
            {
                var idUsuario = Convert.ToInt32(collection["IdUsuario"].Trim());
                Usuario user = contexto.Usuario.FirstOrDefault(u => u.idUsuario == idUsuario);
    
                var userName = collection["usuario"].Trim();
                long IDCliente = Convert.ToInt32(collection["Conve"].Trim());
               
                /*********** ESTO FUE LO QUE COPIE PARA QUE FUNCIONARA **********/
                
                    List<Models.TableAsign> lst = null;
                    using (TPConveniosEntities db = new TPConveniosEntities())
                    {
                        lst = (from d in db.Cliente
                               orderby d.nombre
                               select new TableAsign
                               {
                                   IdCliente = d.idCliente,
                                   nombre = d.nombre
                               }).ToList();
                    }
                    List<SelectListItem> items = lst.ConvertAll(d =>
                    {
                        return new SelectListItem()
                        {
                            Text = d.nombre.ToString(),
                            Value = d.IdCliente.ToString(),
                            Selected = false
                        };
                    });
                    ViewBag.items = items;
    
                   /***************************   HASTA AQUI   **********************/
                    user.userName = userName;
                    user.idCliente = IDCliente;
                    contexto.SaveChanges();
     
                    return View(user);
                }
            }

    Espero le sirva a alguien

    • Marcado como respuesta Harrison B jueves, 15 de abril de 2021 11:50
    miércoles, 14 de abril de 2021 19:39