none
Ejecutar funcion js desde code behind ? RRS feed

  • Pregunta

  • Tengo un archivo js con funciones, el archivo js lo importo desde una pagina aspx y quiero llamar una funcion para que se ejecute en un momento determinado y no en el evento click del servidor.

    por ejemplo

    funcion mensaje

     function alerta(msg) {
          alert('error: '+msg);
     }

    codigo c#:

     protected void btn_Click1(object sender, EventArgs e)
    {
         //ejecuta un proceso x
         
         if(!proceso)
         {
             //aqui quiero ejecutar mi funcion pasandole un mensaje
             funcionJs('falta un campo');
         }
         else
         {
             functionJs('Success');
         }
    }

    Es posible hacer eso ?


    jueves, 11 de mayo de 2017 18:02

Respuestas

  • hola

    >>que es lo que debería llevar ese string script, el mensaje  ?

    no, el javascript que quieres ejecutar

    en tu caso seria la invocacion a la funcion que ya tienes declarada en el aspx

    o sino defines

    string script = "alert(''+mensaje+'');";

    si es que solo vas a ejecutar un alert

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 15 de mayo de 2017 10:51

Todas las respuestas

  • Es más complicado de lo que parece. Puesto que la función se ha de ejecutar en lado cliente, pero la orden de ejecución ha de partir desde el lado servidor, se necesita hacer precisamente lo que indicas en tu comentario, es decir "pasarle un mensaje". Pero la infraestructura de red (y el navegador) no permiten que el paso de mensaje sea iniciado desde el servidor. Todas las comunicaciones entre cliente y servidor tienen que iniciarse desde el cliente. Así que hay que iniciar la llamada desde el cliente y mantenerla "a la espera" por si el servidor le contesta, y en ese caso ejecutar la función. Afortunadamente, ya existen librerías que son capaces de hacer eso. Te recomiendo que consideres SignalR (haz una búsqueda, hay muchos tutoriales en Internet).

    Dicho eso, si solo es para dar una alerta diciendo que "falta un campo", hay formas mucho más sencillas de hacerlo. Me imagino que era solo un ejemplo y que no es realmente ese el objetivo que quieres conseguir.

    jueves, 11 de mayo de 2017 18:12
  • Es más complicado de lo que parece. Puesto que la función se ha de ejecutar en lado cliente, pero la orden de ejecución ha de partir desde el lado servidor, se necesita hacer precisamente lo que indicas en tu comentario, es decir "pasarle un mensaje". Pero la infraestructura de red (y el navegador) no permiten que el paso de mensaje sea iniciado desde el servidor. Todas las comunicaciones entre cliente y servidor tienen que iniciarse desde el cliente. Así que hay que iniciar la llamada desde el cliente y mantenerla "a la espera" por si el servidor le contesta, y en ese caso ejecutar la función. Afortunadamente, ya existen librerías que son capaces de hacer eso. Te recomiendo que consideres SignalR (haz una búsqueda, hay muchos tutoriales en Internet).

    Dicho eso, si solo es para dar una alerta diciendo que "falta un campo", hay formas mucho más sencillas de hacerlo. Me imagino que era solo un ejemplo y que no es realmente ese el objetivo que quieres conseguir.

        Gracias estimado, efectivamente en estos momentos lo necesito solo para mostrar alertas, hasta el momento lo hago con:

    Response.Write('<script>alert(''+mensaje+'');</script>');

    Pero ahora me surgio la necesidad de mejorar el aspecto visual de las alertas utilizando librerías como bootstrap o Pnotify que las implemento en un archivo js del lado del cliente, mi complicación mas que nada es que tal como mencionas estoy utilizando controles de servidor asp para ejecutar las acciones por lo que trabajo directo con el code behind y la pagina aspx, quizás si utilizara ajax ahi me sería mas sencillo ya que según la respuesta podría mostrar la alerta pero no es mi caso.

    jueves, 11 de mayo de 2017 18:20
  • hola

    tiene que usar el ScriptManager para invocar la funcion

     protected void btn_Click1(object sender, EventArgs e)
    {
         //ejecuta un proceso x
         
         if(!proceso)
         {
    	string script = "funcionJs('falta un campo');";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, true);
         }
         else
         {
             
         }
    }

    saludo


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 11 de mayo de 2017 18:50
  • hola

    tiene que usar el ScriptManager para invocar la funcion

     protected void btn_Click1(object sender, EventArgs e)
    {
         //ejecuta un proceso x
         
         if(!proceso)
         {
    	string script = "funcionJs('falta un campo');";
            ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, true);
         }
         else
         {
             
         }
    }

    saludo


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

          Hola, no entiendo, que es lo que debería llevar ese string script, el mensaje  ?

          yo puse ese "funcionJs" a modo de ejemplo simulando que ahí ejecutare la llamada de mi función nada mas,

          saludos

    viernes, 12 de mayo de 2017 0:03
  • hola

    >>que es lo que debería llevar ese string script, el mensaje  ?

    no, el javascript que quieres ejecutar

    en tu caso seria la invocacion a la funcion que ya tienes declarada en el aspx

    o sino defines

    string script = "alert(''+mensaje+'');";

    si es que solo vas a ejecutar un alert

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 15 de mayo de 2017 10:51