none
Ejecutar JavaScript desde ActionResult o PartialViewResult RRS feed

  • Pregunta

  • Hola a todos!!

    Tengo una cuestión, sobre cómo hacer que se ejecute código java script, generando la instrucción desde un ActionResult o un PartialViewResult.

    Por ejemplo, en un ActionResult, después de realizar alguna búsqueda u operación en base de datos, necesito informarle al usuario el estatus de su solicitud (por ejemplo, si se produjo un error, o todo fue satisfactorio), y necesito hacerlo por medio de un alert, para el cual, cree la función ShowAlert() en un archivo .js.

    Cómo puedo hacer, para que desde el ActionResult se genere la "llamada" a la función ShowAlert() ?


    AUR

    martes, 28 de octubre de 2014 0:10

Respuestas

  • LA solución fué, convertir el ActionResult en JavaScriptResult, desde donde se retorna la llamada a la función 'ShowAlert()':

    public JavaScriptResult(string message){
           /*...*/
           return JavaScript("ShowAlert("+message+");")
    }


    AUR

    • Marcado como respuesta Ale Uribe miércoles, 11 de febrero de 2015 16:07
    miércoles, 11 de febrero de 2015 16:07

Todas las respuestas

  • Hola, lo que te recomiendo yo es hacer una devolucion json

    [HttpPost]
    public ActionResult Accion(int? id)
    {
        //Haces operacion
        return Json(new { success = true, message = "" });
    }

    y luego desde js llamas a ese action:

    $.ajax({ url: '@Url.Action("Accion", "Controlador")', type: 'POST', data: { id: id }, success: function (result) { if (result.success) { //Significa que fue todo bien!
    //Mandas alerta

    } else { //Significa que hubo error! } } });


    Saludos

    martes, 28 de octubre de 2014 1:17
  • Buenas noches, usted también puede utilizar la variable dinámica ViewBag para capturar un error

     public ActionResult Index()
            {
                try
                {
                    ......
                }
                catch
                {
                    ViewBag.Message = "error message";
                }
                return View();
            }

    Y en su vista

    <script src="~/Scripts/jquery-1.8.2.js"></script>
    <script>
        $(function () {
            var error = document.getElementById("alerta").innerText;
                if (error != "" ){
                alert(error);
            }
        });
    </script>
    
    <div id="alerta" hidden>
        @ViewBag.Message
    </div>
    


    G. Poliovei

    martes, 28 de octubre de 2014 1:50
  • hola

    no queda claro, vas a enviar en una misma respuesta datos y javascript como respuesta en la view ?

    porque si es asi en realidad no envias nada sino en la view habilitas en el modelo que debe mostrar el mensaje

    algo como ser

    public ActionResult Index()
    {
    	//aqui la busqueda
    	ViewBag.BusquedaSatisfactoria = true;
    	
    	return View();
    }

    y en la view

    <script>
    	@if(ViewBag.BusquedaSatisfactoria ){
    		alert("La busqueda fue un exito");
    	}
    </script>
    
    <!--aqui generas los datos de la view-->

    como veras usas el flag directo para cambiar como se genera la view que devuelves renderizando o no el alert

    igual lo que no queda claro si lo que devuelves es una view con html, o si es con json o quieres enviar solo javascript


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    martes, 28 de octubre de 2014 10:33
  • LA solución fué, convertir el ActionResult en JavaScriptResult, desde donde se retorna la llamada a la función 'ShowAlert()':

    public JavaScriptResult(string message){
           /*...*/
           return JavaScript("ShowAlert("+message+");")
    }


    AUR

    • Marcado como respuesta Ale Uribe miércoles, 11 de febrero de 2015 16:07
    miércoles, 11 de febrero de 2015 16:07