none
Uso de Ajax en C#

    Pregunta

  • Estoy Trabajando en un proyecto MVC en C# con vistas Razor en el cual creo un boton de manera dinamica de la siguiente manera: 

    @for (int i = 0; i < ViewBag.NumPages; i++)
               {
                   <input type="button" name="pagin" value=@(i+1) id=@onclick="return Pag(this)" />
               }

    llamo al evento OnClick del boton mediante JavaScript:

    function Pag(button) {
               alert(button.value);
           }

    lo que necesito es que lo que muestro dentro del alert en JS (seria el value del boton), se pase a un atributo del modelo, como por ejemplo @Model.id o hacia un @ViewBag.

    Me dijeron que para poder acceder al modelo desde JS necesito utilizar Ajax, el problema es que no se como realizarlo con Ajax. Alguna idea o guia que puedan recomendar?

    Gracias y Saludos.

    jueves, 12 de julio de 2018 18:34

Todas las respuestas

  • No, no puedes hacerlo como piensas. El Modelo ya no existe en ese momento. Solo se genera en lado servidor y se envía al motor de Razor para que genere la Vista. Una vez generada, el modelo se destruye, y la vista se envía al navegador. Una vez que está en el navegador, se puede ejecutar el click del botón y ejecutar el javascript, pero fíjate que para entonces el modelo ya ha dejado de existir, por lo que no puedes "pasar al modelo" ningún dato. Y lo mismo pasa con el ViewBag cuando el html llega al navegador, el ViewBag ya se ha destruido; no puedes pasarle nada.

    Lo que se hace en estos casos es usar ajax para transmitir el dato a un método del controlador. El dato le llega como argumento al método, y el método puede hacer con él lo que quiera, incluyendo crear una nueva instancia de cualquier Modelo y meterle el dato en cualquier propiedad.

    Una forma sencilla de hacer esa llamada es usando jQuery. Si tienes la librería cargada, basta con hacer algo así como esto: $.Get("/miControlador/miMetodo/" + button.value);

    Por supuesto, admite refinamientos incluyendo generar dinámicamente la Url en lugar de dejarla "fija", o usar un Post en lugar del Get.

    jueves, 12 de julio de 2018 19:32
  • hola

    exacto, usando ajax de jquery puedes invocar a un action del controller

    como veras puedes usar el $.get() o $.ajax() para invocar al servidor y obtener esta info que envias, pero envias el dato no un ViewBag, porque este actua en el render de la view y en este caso no tienes eso

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 16 de julio de 2018 17:12