none
Pasar un List desde controlador a la vista luego de una llamada Ajax RRS feed

  • Pregunta

  • Hola, estoy usando MVC 4 para desarrollar una aplicación y necesito que luego de una llamada Ajax poder pasar un List  a una vista, lo cual aún no sé como hacerlo.

    El código con el cual hago la llamada Ajax es: 

    $.post('InsertarMedicamento',
    {                                        
      valorId: id,
      valorCant: cantidad,
      valorNombre: nombre,  
    }, function (data) {
       alert(success);
    });
     

    Y en el controlador el código es este:

    public ActionResult InsertarEnArray(MedicamentoEntrega model, int valorId, int valorCant,string valorNombre)
    {         
             MedicamentoView medimSelec = new MedicamentoView();
             medimSelec.Id = valorId;
             medimSelec.Cantidad = valorCant;
             medimSelec.Nombre = valorNombre;         
             if (Session["Medicamentos"] == null)         
                model.MedicamentosSeleccion = new List<MedicamentoView>();
    else
             model.MedicamentosSeleccion = (List<MedicamentoView>)Session["Medicamentos"];
             model.MedicamentosSeleccion.Add(medimSelec);
             Session["Medicamentos"] = model.MedicamentosSeleccion;                  
             return this.Json(new { success = true });
    }

    Básicamente lo que necesito hacer es insertar en un List<MedicamentoView> un elemento medicamento, lo cual hago usando una variable de Session. Esto funciona, pero lo que necesito es que luego de insertarlo en el List, me devuelva dicho List a la vista de modo de poder mostrarlo en forma de un <table> html. 

    Cálculo que se debería usar la última linea del controlador para retornar el List. Alguno me podría dar un ejemplo de cómo hacerlo y luego poder leer el List en el javascript para visualizarlo en la Vista.

    Saludos.


    • Editado ricky_007 miércoles, 11 de mayo de 2016 16:53
    miércoles, 11 de mayo de 2016 12:00

Respuestas

  • Hola ricky_007,

    Efectivamente, podrías enviar una lista con formato JSON y el método $.ajax se encargaría de armar la lista fila por fila. Lo que también podrías hacer es que retorne una vista parcial y ese html inyectarlo en un contenedor que definas para la tabla. La segunda opción me parece la mas simple porque lo único que haces es inyectar elementos HTML (ademas de los datos) en un contenedor.

    miércoles, 11 de mayo de 2016 13:37
  • hola

    porque desde el $.post invocas a InsertarMedicamento cuando en el controller el action se llama InsertarEnArray() ? no veo que coincidan los nombres

    para devolver una lista podrias usar

    public JsonResult InsertarEnArray(MedicamentoEntrega model, int valorId, int valorCant,string valorNombre)
    {         
    	 //reto codigo
    	 
    	 return this.Json(model.MedicamentosSeleccion);
    }

    devuelves un json como respuesta, enviando la lista serializada

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 11 de mayo de 2016 13:50

Todas las respuestas

  • Hola ricky_007,

    Efectivamente, podrías enviar una lista con formato JSON y el método $.ajax se encargaría de armar la lista fila por fila. Lo que también podrías hacer es que retorne una vista parcial y ese html inyectarlo en un contenedor que definas para la tabla. La segunda opción me parece la mas simple porque lo único que haces es inyectar elementos HTML (ademas de los datos) en un contenedor.

    miércoles, 11 de mayo de 2016 13:37
  • hola

    porque desde el $.post invocas a InsertarMedicamento cuando en el controller el action se llama InsertarEnArray() ? no veo que coincidan los nombres

    para devolver una lista podrias usar

    public JsonResult InsertarEnArray(MedicamentoEntrega model, int valorId, int valorCant,string valorNombre)
    {         
    	 //reto codigo
    	 
    	 return this.Json(model.MedicamentosSeleccion);
    }

    devuelves un json como respuesta, enviando la lista serializada

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 11 de mayo de 2016 13:50
  • Hola Leandro, gracias por responder. Si tienes razón..El controlador en realidad se llama InsertarMedicamento, me olvide de cambiarlo al pegar el código.

    ¿Me podrías pasar un ejemplo de cómo en el javascript, tomaría ese objeto JSON devuelto para  visualizar el List en la vista?

    Saludos.

     
    miércoles, 11 de mayo de 2016 16:51
  • Hola, pudiste resolver tu duda?

    Gracias


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 17 de mayo de 2016 7:11
    Moderador
  • Cierro el hilo por falta de información por tu parte. Si no has podido resolver tu duda desmarca las respuestas y nos haces saber que sigues necesitando ayuda. Gracias

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    lunes, 23 de mayo de 2016 11:26
    Moderador