none
Acceder al modelo desde javascript RRS feed

  • Pregunta

  • Hola, antes que nada quiero agradecer por toda la información que comparten en el foro, es realmente de mucha utilidad. 

    La pregunta concreta es como asignar el valor de una variable javascript a la variable @Model. 

    Soy nuevo en el tema y me esta partiendo la cabeza jaja. Quedo a la espera de una pronta respuestas.

    Saludos y muchas gracias

    miércoles, 21 de marzo de 2012 15:33

Respuestas

  • ahh era para el otro lado la asignacion

    no estoy seguro en mvc, pero en asp.net se podria crear un webmethod en la pagina que al ser invocado con $.ajax puede asignar el valor

    quizas se pueda hacer esto mismo invocando algun metodo del controller

    por supuesto la info del modelo deberia estar en Session para poder actualizarla porque sino se mentiene estado en el server no tendria sentido

    apunto a una tecnica simila a esto

    [ASP.NET] Mantener la Session Activa Indefinidamente

    en donde se accede al server desde el cliente mediante jquery con $.ajax, pero invocando a un controller

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Eder Costa viernes, 26 de octubre de 2012 14:50
    miércoles, 21 de marzo de 2012 21:02
  • Hola Leandro,

    En Asp.net mvc y gracias a Dios no hace falta declarar WebMetod es en el propio controlador donde podemos definir un método para recibir tanto las peticiones via get como post. Mira si seguimos el patron "post redirect get" o "PRG" lo que se hace es lo siguiente.

    public class Controlador:Controller
    {
       public int Index()
       {
          //bla bla bla :)
       }
       public ActionResult Accion(int Id)
       {
         Modelo = new Modelo{id=10,Nombre = "Hola"};
         //Esta es la variable que en la vista tratas como @Model
         return View(Modelo);
         
       }
       [HttpPost()]
       public ActionResult Accion(Modelo Modelo)
       {
          //Haces lo que necesites con el Modelo
          RedirectToAction("Index");
       }
    }

    Tu en vez de devolver View(Modelo) podrías devolver Json(Modelo); o cuanquier objeto que herede de ActionResult.

    http://msdn.microsoft.com/en-us/library/system.web.mvc.actionresult.aspx

    Por ejemplo si trabajas con JQuery y utilizas $.Get o $.Post una de las cosas que se hace en el post es devolver HttpStatusCodeResult tal y como se puede ver en este enlace http://weblogs.asp.net/gunnarpeipman/archive/2010/07/28/asp-net-mvc-3-using-httpstatuscoderesult.aspx..

    Pero vamos para nada con Javascript podemos modificar el valor de @Model, es el propio ciclo de vida de una petición el que se encarga de mantener esto desde el controlador ,pasando a la vista el Modelo.

    Saludos,


    phurtado
    Mi Blog Blog
    Sigueme en Twitter

    • Marcado como respuesta Eder Costa viernes, 26 de octubre de 2012 14:50
    miércoles, 21 de marzo de 2012 22:00

Todas las respuestas

  • Hola,

    @Model forma parte de la sintaxis Razor http://www.asp.net/web-pages/tutorials/basics/2-introduction-to-asp-net-web-programming-using-the-razor-syntax, con lo cual no veo ningún sentido a acceder a @Model desde Javascript puesto que @Model forma parte de lo que sería el servidor y javascript se va a ejecutar en el cliente.

    Es decir todo lo que escribas en razor es código servidor y javascript es código cliente:)

    Saludos.


    phurtado
    Mi Blog Blog
    Sigueme en Twitter

    miércoles, 21 de marzo de 2012 16:02
  • hola

    no has evaluado en la view hacer algo como ser

    <script ...>

       var nombrevarialbe = '@(Model.NombrePropiedad)';

    </script>

    using razor within javascript

    using razor within javascript

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 21 de marzo de 2012 17:10
  • Hola Leandro,

    La verdad que con eso lo que haces es acceder al valor de una propiedad del modelo, pero creo que la pregunta no va por hay, sino como asignar el valor de una variable javascript al Modelo, eso que yo sepa no se puede. En todo caso desde el Contralador puede recibir los valores de una petición con json y el mecanismo de Binding de mvc se encarga de convertir ese json a tu modelo. 

    Pero lo que yo he entendido en la pregunta es como cambiar el valor de @Model y eso no se puede.

    Lo digo por esto

    "La pregunta concreta es como asignar el valor de una variable javascript a la variable @Model. "

    Saludos,


    phurtado
    Mi Blog Blog
    Sigueme en Twitter

    miércoles, 21 de marzo de 2012 20:34
  • ahh era para el otro lado la asignacion

    no estoy seguro en mvc, pero en asp.net se podria crear un webmethod en la pagina que al ser invocado con $.ajax puede asignar el valor

    quizas se pueda hacer esto mismo invocando algun metodo del controller

    por supuesto la info del modelo deberia estar en Session para poder actualizarla porque sino se mentiene estado en el server no tendria sentido

    apunto a una tecnica simila a esto

    [ASP.NET] Mantener la Session Activa Indefinidamente

    en donde se accede al server desde el cliente mediante jquery con $.ajax, pero invocando a un controller

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta Eder Costa viernes, 26 de octubre de 2012 14:50
    miércoles, 21 de marzo de 2012 21:02
  • Hola Leandro,

    En Asp.net mvc y gracias a Dios no hace falta declarar WebMetod es en el propio controlador donde podemos definir un método para recibir tanto las peticiones via get como post. Mira si seguimos el patron "post redirect get" o "PRG" lo que se hace es lo siguiente.

    public class Controlador:Controller
    {
       public int Index()
       {
          //bla bla bla :)
       }
       public ActionResult Accion(int Id)
       {
         Modelo = new Modelo{id=10,Nombre = "Hola"};
         //Esta es la variable que en la vista tratas como @Model
         return View(Modelo);
         
       }
       [HttpPost()]
       public ActionResult Accion(Modelo Modelo)
       {
          //Haces lo que necesites con el Modelo
          RedirectToAction("Index");
       }
    }

    Tu en vez de devolver View(Modelo) podrías devolver Json(Modelo); o cuanquier objeto que herede de ActionResult.

    http://msdn.microsoft.com/en-us/library/system.web.mvc.actionresult.aspx

    Por ejemplo si trabajas con JQuery y utilizas $.Get o $.Post una de las cosas que se hace en el post es devolver HttpStatusCodeResult tal y como se puede ver en este enlace http://weblogs.asp.net/gunnarpeipman/archive/2010/07/28/asp-net-mvc-3-using-httpstatuscoderesult.aspx..

    Pero vamos para nada con Javascript podemos modificar el valor de @Model, es el propio ciclo de vida de una petición el que se encarga de mantener esto desde el controlador ,pasando a la vista el Modelo.

    Saludos,


    phurtado
    Mi Blog Blog
    Sigueme en Twitter

    • Marcado como respuesta Eder Costa viernes, 26 de octubre de 2012 14:50
    miércoles, 21 de marzo de 2012 22:00
  • En este ejemplo pasamos la varible JavaScript "Detalle" a la acción "Modificacion" del controlador "Recibos". 

         $(document).on("click", ".BotonModificar", function (event) {
                var Detalle = { Codigo: 1, Importe: 100 };

                event.preventDefault();

                $.ajax({
                    type: "POST",
                    url: '@Url.Action("Modificacion", "Recibos")',
                    contentType: 'application/json; charset=utf-8',
                    data: JSON.stringify(Detalle),
                    cache: false,
                    dataType: "html",
                    success: function (response) {
                        $("#Resultado").html(response);
                    },
                    error: function (request, status, error) { debugger; },
                    complete: function () {}
                });

                return false;

    Accion "Modificar" del controlador "Recibos":

       // Acción Modificar...
       public ActionResult Modificar( DetalleRecibo )
    {
                int idCodigo;
            idTarifa = DetalleRecibo.Codigo;

    decImporte = DetalleRecibo.Importe;

    // Operaciones..........................

                    return PartialView("Vista", DetalleRecibo);
            }

    • Editado snake4u jueves, 25 de septiembre de 2014 10:13
    jueves, 25 de septiembre de 2014 9:55