none
LLamar desde el cs a un método javascript RRS feed

  • Pregunta

  • Buenos días,

    tengo un pequeño problema y espero que alguien me pueda ayudar. 

    Tengo un botón que he creado dinámicamente, que al darle quiero que ejecute una función javascript. 

    He visto en el foro que la gente usa el Response.Write y lo he intentado pero no me hace nada.

    Response.Write("<script type='text/javascript'>cargarMapa();</script>");

    He intentado alguna cosa más que he visto por ahi y tampoco me hace nada. ¿Alguien sabe como puedo llamar a la función de otra manera? El método se que funciona porque al entrar en la página por primera vez se ejecuta lo que pasa que necesito llamarle en otras ocasiones.

    un saludo y gracias de antemano por vuestra atención y ayuda

    miércoles, 4 de abril de 2012 11:23

Respuestas

  • Hola,

    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    sb.Append(@"<script language='javascript'>");
    sb.Append(@"var lbl = document.getElementById('lblMensaje');");
    sb.Append(@"lbl.style.color='red';");
    sb.Append(@"alert(lbl.innerText);");
    sb.Append(@"</script>");
    
     
    if (!ClientScript.IsStartupScriptRegistered("JSScript"))
    {
    ClientScript.RegisterStartupScript(this.GetType(), "JSScript", sb.ToString());
    }


    Jose If a post answers your question, please click "Mark As Answer" on that post and "Mark as Helpful".

    • Propuesto como respuesta silverweb10 martes, 10 de abril de 2012 14:31
    • Marcado como respuesta Agmaza viernes, 11 de mayo de 2012 10:39
    sábado, 7 de abril de 2012 2:14
  • Pues entonces debería valerte con el segundo código que te pasé

    En tu aspx.cs

    protected void babrirmapas_Click(object sender, EventArgs e) { // Rellenas los textbox con las información que quieras

    // Comprobamos si el client no está registrado. En caso de no estar registrado lo registramos. if (!ClientScript.IsClientScriptBlockRegistered("key")) ClientScript.RegisterStartupScript(this.GetType(), "key", "cargarMapa()", true); }

    Y en tu aspx

    <script type="text/javascript" language="javascript">
      function cargaMapa() {
        // Lo que tengas que hacer para pintar el mapa
      }
    </script


    Atentamente, Sergio.

    Blog
    Twitter

    • Marcado como respuesta Agmaza viernes, 11 de mayo de 2012 10:39
    miércoles, 4 de abril de 2012 13:51

Todas las respuestas

  • Para lo que quieres hacer deber usar la propiedad OnClickClick

    Creas el botón así

    Button button = new Button();
    button.Text = "Haz click";
    button.OnClientClick = "mifuncion()";
    PlaceHolder.Controls.Add(button);

    y en el aspx pones esto

    <script type="text/javascript" language="javascript">
    	function mifuncion() {
    		alert('mifuncion');
    	}
    </script


    Atentamente, Sergio.

    Blog
    Twitter

    miércoles, 4 de abril de 2012 11:38
  • Es que tengo en el boton este código

    bTexto.Click += new EventHandler(babrirmapas_Click);

    que cuando va al metodo hace unas cuantas accciones primero y luego llama al método que tengo en el javascript.

    Un saludo

    miércoles, 4 de abril de 2012 11:48
  • Entonces lo que quieres es que al hacer click vaya al servidor y luego se ejecute código cliente. Prueba con esto

    protected void babrirmapas_Click(object sender, EventArgs e) { // Ejecuta el código que quieras

    if (!ClientScript.IsClientScriptBlockRegistered("script")) ClientScript.RegisterStartupScript(this.GetType(), "script", "mifuncion()", true); }



    Atentamente, Sergio.

    Blog
    Twitter

    miércoles, 4 de abril de 2012 12:00
  • Con el response que tenía que he puesto antes no me hacía nada ni siquiera el resto de acciones que hay en el método del botón. Pero con lo que me has comentado ahora me abre el popup que tiene que abrir con el resto de información que recoge en el resto del método del popup pero no me hace el método javascript que es cargar el mapa.

    Lo he probado con este código y otra opción que he probado es con lo mismo pero en la variable script poniendo esto(string script="<script type='text/javascript'>cargarMapa();</script>")

    string script="cargarMapa()";


                    if (!ClientScript.IsClientScriptBlockRegistered(script))
                    {
                        ClientScript.RegisterStartupScript(Page.GetType(), "cargarMapa", script, true);
                    }

    Muchas gracias 

    miércoles, 4 de abril de 2012 12:17
  • Entonces exactamente que quieres hacer, porque no termino de entenderlo, o has modificado el código que te pase y ha dejado de funcionar. Veamos, tienes un botón y al hacer click, ¿qué quieres que ocurra?¿se ejecute código en el servidor, codigo en el cliente, código en el cliente y el servidor?, en este último caso, ¿en que orden quieres que se ejecute?

    Con respecto a tu código si pones los tags en el script el código quedaría asi

    string script="<script type='text/javascript'>cargarMapa();</script>";
    
    if (!ClientScript.IsClientScriptBlockRegistered("Key"))
    
      ClientScript.RegisterStartupScript(Page.GetType(), "Key", script);

    Si no pones los tags es asi

    string script="cargarMapa();";
    
    if (!ClientScript.IsClientScriptBlockRegistered("Key"))
    
      ClientScript.RegisterStartupScript(Page.GetType(), "Key", script, true);

    Fijate que el método RegisterStartupScript tiene tres parámetros, el primero es el tipo que está registro el scrip, el segundo, por decirlo de alguna manera es el nombre que le estás dando al script que vas a registrar, por eso, en el if comprobamos si no está ya registrado y así evitar registrarlo dos veces (no es el script propiamente dicho, sino un nombre). Y el tercer parámetro indicamos si queremos que .NET añada los tag <script> y </script> a lo que nosotros pasemos.


    Atentamente, Sergio.

    Blog
    Twitter


    • Editado sergiomf miércoles, 4 de abril de 2012 12:29
    miércoles, 4 de abril de 2012 12:29
  • Tengo un botón creado dinámicamente que en el método relleno unos textbox con una información y para terminar tiene que llamar a un método que se llama cargarMapa que es un método de javascript con el cuál se me tendría que salir la ubicación en un mapa.

    Por eso quiero llamar al cargarMapa una vez que he terminado de hacer las otras acciones en el botón.

    Gracias por vuestra atención

    miércoles, 4 de abril de 2012 13:19
  • Pues entonces debería valerte con el segundo código que te pasé

    En tu aspx.cs

    protected void babrirmapas_Click(object sender, EventArgs e) { // Rellenas los textbox con las información que quieras

    // Comprobamos si el client no está registrado. En caso de no estar registrado lo registramos. if (!ClientScript.IsClientScriptBlockRegistered("key")) ClientScript.RegisterStartupScript(this.GetType(), "key", "cargarMapa()", true); }

    Y en tu aspx

    <script type="text/javascript" language="javascript">
      function cargaMapa() {
        // Lo que tengas que hacer para pintar el mapa
      }
    </script


    Atentamente, Sergio.

    Blog
    Twitter

    • Marcado como respuesta Agmaza viernes, 11 de mayo de 2012 10:39
    miércoles, 4 de abril de 2012 13:51
  • Hola,

    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    sb.Append(@"<script language='javascript'>");
    sb.Append(@"var lbl = document.getElementById('lblMensaje');");
    sb.Append(@"lbl.style.color='red';");
    sb.Append(@"alert(lbl.innerText);");
    sb.Append(@"</script>");
    
     
    if (!ClientScript.IsStartupScriptRegistered("JSScript"))
    {
    ClientScript.RegisterStartupScript(this.GetType(), "JSScript", sb.ToString());
    }


    Jose If a post answers your question, please click "Mark As Answer" on that post and "Mark as Helpful".

    • Propuesto como respuesta silverweb10 martes, 10 de abril de 2012 14:31
    • Marcado como respuesta Agmaza viernes, 11 de mayo de 2012 10:39
    sábado, 7 de abril de 2012 2:14