none
Ajax en MVC3 RRS feed

  • Pregunta

  • Hola a todos,

    Estoy empezando mi 1er proyecto serio en MVC3, y necesito realizar llamadas ajax al servidor. Por ahora, estoy usando jQuery para hacer una llamada ajax, y al acabar la llamada ya cambio mediante javascript los controles que deban cambiar. Este es un ejemplo:

     $.ajax({
            url: "/Main/CambiarEstado/" + id
            type: "POST",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function (data) {
              if (!data) {
                alert("Error");
              }
              else {
                $("#color_" + id).css("background-color", newColor);
              }
            },
            error: function () {
              alert("error!!!");
            }
          });
    

    Y la primera de mis preguntas es: quisiera saber es si existe una manera más sencilla de hacer las llamadas ajax.

    Mi segunda pregunta: Todo viene porque necesito hacer lo siguiente: El usuario de la web va a poder cambiar de estado un item de los que se mostrarán en una parte de la pagina, al hacerlo, se deberá cambiar el orden de los items de la lista de items (lista que se monta dentro de un bucle foreach). Esto lo podria solucionar volviendo a realizar el foreach desde cero, pero nose como hacer eso sólo para una parte de la página. Sería como volver a pintar solamente esa parte de la página.

     

    Gracias de antemano, espero haberme explicado bien ;)

     

     

    Carlos.

    sábado, 7 de mayo de 2011 9:39

Respuestas

  • Y la primera de mis preguntas es: quisiera saber es si existe una manera más sencilla de hacer las llamadas ajax.


    Sí. Es más sencillo usar los métodos $.get, $.post y $(selector).load para hacer las llamadas ajax. Estos métodos internamente llaman a $.ajax, pero te dan una sintaxis simplificada para hacer la llamada. En especial, el método load es particularmente simple, porque trae datos y los pinta en el objeto seleccionado. Si lo buscas en la doc de jquery verás que hay varios ejemplos y es muy fácil de usar:

    http://api.jquery.com/load

    Esto engancha bastante bien con tu segunda pregunta: si tienes ya una Vista que devuelva el contenido del foreach, puedes hacer un .load sobre el contenedor del resultado que en la url llame a la Acción que devuelve dicha vista. De esta forma, puedes repintar sólo esa parte de la pantalla sin escribir prácticamente nada de código.

     

    • Propuesto como respuesta Felipe Sotelo S domingo, 8 de mayo de 2011 0:39
    • Marcado como respuesta Eder Costa miércoles, 10 de octubre de 2012 12:45
    sábado, 7 de mayo de 2011 15:02

Todas las respuestas

  • Y la primera de mis preguntas es: quisiera saber es si existe una manera más sencilla de hacer las llamadas ajax.


    Sí. Es más sencillo usar los métodos $.get, $.post y $(selector).load para hacer las llamadas ajax. Estos métodos internamente llaman a $.ajax, pero te dan una sintaxis simplificada para hacer la llamada. En especial, el método load es particularmente simple, porque trae datos y los pinta en el objeto seleccionado. Si lo buscas en la doc de jquery verás que hay varios ejemplos y es muy fácil de usar:

    http://api.jquery.com/load

    Esto engancha bastante bien con tu segunda pregunta: si tienes ya una Vista que devuelva el contenido del foreach, puedes hacer un .load sobre el contenedor del resultado que en la url llame a la Acción que devuelve dicha vista. De esta forma, puedes repintar sólo esa parte de la pantalla sin escribir prácticamente nada de código.

     

    • Propuesto como respuesta Felipe Sotelo S domingo, 8 de mayo de 2011 0:39
    • Marcado como respuesta Eder Costa miércoles, 10 de octubre de 2012 12:45
    sábado, 7 de mayo de 2011 15:02
  • Ok genial, gracias por la info! Entiendo que seria con una "partial view" no? Hasta ahora lo estaba haciendo todo en la misma vista, no he usado nunca este tipo de vista :P.

     

    Saludos.

    sábado, 7 de mayo de 2011 19:24
  • No necesariamente tiene por qué ser una partial view. Puedes usar una vista cualquiera (de hecho con Razor no hay ninguna diferencia). El método .load de jQuery acepta un segundo parámetro (después de la url) que es un selector que permite "cortar" un cacho de la página descargada. De esta forma, puedes usar una vista cualquiera (sea o no parcial) y extraer de ella en el lado cliente la parte que quieras repintar encima de la página original. Por supuesto, si quieres minimizar el tráfico del servidor al cliente, te interesa pintar una vista que sólo tenga el "pedazo" que quieres. Lo puedes hacer con una vista cualquiera, no tiene por qué contener cabeceras ni pies ni nada, sino sólo el fragmento que quieras repintar en la página.
    sábado, 7 de mayo de 2011 21:00