none
Capturar el resultado de una accion en una variable de javascript RRS feed

  • Pregunta

  • Hola!

    Mi consulta es como dice le titulo de mi pregunta, quisiera capturar en una variable de javascript el resultado de una accion, he hecho lo siguiente hasta ahora:

     $("#Datos_Duracion").change(function () {
                //           
                var idNivel = document.getElementById('Datos_IDNivel').value;
                
                var duracion = $(this).val();
                var valor;
              
                var url = '<%=Url.Action("CalculoIngreso", "AnunciosPublicidad", new { dias = "param1", idNivel="param2" })%>';
                url = url.replace("param1", duracion);
                url = url.replace("param2", idNivel);
                $("#Datos_Ingreso").load(url);
          
            });

    "#Datos_Ingreso" es un textbox y quisiera que en el evento change de un dropdownlist ("Datos_Duracion"), se cargue el valor calculado en el textbox.

    Gracias de antemano por la ayuda.

    Saludos :)

     
    jueves, 14 de noviembre de 2013 14:52

Todas las respuestas

  • Hola que tal entiendo que no te está funcionando, voy a intentar ponerte el código de una manera más limpia y correcta a ver si te va, ten en cuenta que igual que en otros lenguajes en JavaScript es importante utilizar las buenas prácticas.

    // Primero de todo encapsulamos el código
    // Le pasamos las variables que queremos tener en ese trozo de código 
    // así una vez cargadas ya no las va a buscar fuera
    (function($){
    
    	// El tipo de evento que nos va a ir mejor siempre es el .on()
    	// Corresponde al antiguo .bind() y se recomienda utilizarlo siempre.
    	$('#Datos_Duracion').on('change', function() {
    
    		// Ya que has cargado jQuery mejor usarlo no?
    		var idNivel = $('#Datos_IDNivel').val()
    		var duracion = $(this).val();
    		var valor;
    
    		var url = '<%=Url.Action("CalculoIngreso", "AnunciosPublicidad", new { dias = "param1", idNivel="param2" })%>';
            url = url.replace("param1", duracion);
            url = url.replace("param2", idNivel);
            $("#Datos_Ingreso").load(url);
    
            // Si no te va cuentame si es que no he entendido tu problema
    
    	});
    
    })(jQuery);

    jueves, 14 de noviembre de 2013 18:14
  • hola

    deberias usar $.post o $.ajax para invocar un action desde javascript

    Combinando ASP.NET MVC framework y jQuery, paso a paso

    como veras se usa el @Url.Action() en $.ajax para invocar un action y esperar la respuesta sin post de la pagina

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 14 de noviembre de 2013 18:44
  • Exacto se me pasó, como dice el compañero puedes utilizar $.post, tienes varias maneras de llamar a $.ajax en jQuery $.ajax, $.get, $.post, $.load..
    en concreto la de load está haciendo un $get y poniendo los resultados en tu selector.

    siempre puedes echar un vistazo http://api.jquery.com/jQuery.post/

    jueves, 14 de noviembre de 2013 18:48
  • Hola :)

    Gracias por responder a todos, pero creo que no deje entender mi problema, me ha sido posible acceder a la accion, es decir puedo cargar el dato del resultado de la acción en una etiqueta <label></label>

    Lo que no puedo es que el resultado se cargue directamente en el textbox "Datos_Ingreso"

    es decir esta linea: 

    $("#Datos_Ingreso").load(url);

    No me funciona, el valor resultante del caclulo no se carga en el textbox, pero si lo hago en un label perfectamente lo puedo visualizar. Ojala puedan darme la solución

    Saludos cordiales

    jueves, 14 de noviembre de 2013 19:23
  • si ya te ha contestado él antes :) load hace un get y tu quieres un post seguramente ese es tu problema coge los datos con post y luego onsuccess pones los datos

    $.post( url,

    {param1: duracion, param2: idNivel}

    ,function( data ) { $( "#Datos_Ingreso" ).val( data ); });


    jueves, 14 de noviembre de 2013 19:28
  • Hola

    este es el codigo modificado con su ayuda:

     $("#Datos_Duracion").change(function () {
                var idNivel = $("#Datos_IDNivel").val();
                var duracion = $(this).val();
                var valor;
               
                $.post({
                    cache: false,
                    url: '<%=Url.Action("CalculoIngreso", "AnunciosPublicidad")%>',
                    data: {
                        dias: duracion,
                        idNivel: idNivel
                    },
                    success: function (data) {
                        $("#Datos_Ingreso").val(data);
                    }
                });
            });

    Esta es la acción del controlador

      public ActionResult CalculoIngreso(string dias, string idNivel)
            {
                return Content(AnuncioRepositorio.CalcularIngreso(dias, idNivel));
            }

    Aun no me funciona, me devuelve el siguiente error en la consola javascript:

    GET http://localhost:26460/Admin/AnunciosPublicidad/[object%20Object] 404 (Not Found)

    lo mismo sucede cuando uso $.post en lugar de $.get


    jueves, 14 de noviembre de 2013 20:02
  • pero eso no es un error de javascript, el problema es lo que estás enviando por la url le estás pasando hasta un objeto :S nos puedes enseñar la url que realmente deseas?
    jueves, 14 de noviembre de 2013 20:04
  • claro...

    /Admin/AnunciosPublicidad/CalculoIngreso

    Lo que me llama la atención es que crei que seria algo muy simple, antes podia capturar el resultado de la accion en una etiqueta label o pasarla a un div, pero no me es posible cargarla en un textbox?!?!?!?!?!? :/

    jueves, 14 de noviembre de 2013 20:10
  • Pues parece que donde pones CalculoIngreso estás poniendo un objeto :S
    márcate un debugger antes y a ver que estás pasando mal :)

    PD: asegúrate también que estás pasando bien los parámetros (lo de data)

    jueves, 14 de noviembre de 2013 20:13
  • recuerda definir

    [HttpPost]  
    public ActionResult CalculoIngreso(string dias, string idNivel)
            {
                return Content(AnuncioRepositorio.CalcularIngreso(dias, idNivel));
            }

    para marcar el action que actue como post

    ---

    ademas porque se ve alli que la url dice Admin/AnunciosPublicidad/

    cuando el action dice url: '<%=Url.Action("CalculoIngreso", "AnunciosPublicidad")%>',

    como que el controlador y el action no tienen nada que ver, porque se llama a Admin si deberia ser AnunciosPublicidad

    estas seguro esa alli dodne falla, no sera algun otro codigo?

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 14 de noviembre de 2013 20:18
  • hola

    veo que mencionas

    /Admin/AnunciosPublicidad/CalculoIngreso

    entonces la duda "Admin" es un Area de asp.net mvc?

    porque no esta claro como resuleve la url

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 14 de noviembre de 2013 20:19
  • si si, es un area

    pero como dije, no creo que haya problemas con acceder al url o con las rutas,  porque ya he mostrado el resultado en un label y en un div, pero no logro mandarlo a un textbox 

    jueves, 14 de noviembre de 2013 20:26
  • el problema no es el textbox no estás recibiendo la info, pon cualquier string en el textbox y te irá
    jueves, 14 de noviembre de 2013 20:28
  • que pasa si haces, solo para probar

    $("#label1").load(url);

    $("#textbox1").val($("#label1").html());

    para ver si se sigue cargando en el label y eso lo puedes asignar a un textbox


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 14 de noviembre de 2013 20:35