none
Llamar una funcion del lado del servidor con javascript RRS feed

  • Pregunta

  • Hola...
    Quisiera saber como pordria llamar una funcion que esta al lado del servidor, utilizando javascript y ajax.net...pero sin utilizar ningun control de ajax.net (UpdatePanel...etc.)... lo unico que se hacer es es llamar a la funcion javascript dentro  del ScriptManager
    asi:

    <asp:ScriptManager runat="server" ID="ScriptManager01">
                    <scripts>
                       <asp:ScriptReference Path="~/Hola.js" />
                    </scripts>
                </asp:ScriptManager>
    Lo que quiero es poder llamar un metodo que esta al lado del servidor y que me retorne por ejemplo un string un "Hola Mundo"....
    Gracias...
    miércoles, 8 de abril de 2009 4:17

Respuestas

  • Hola manuel

    Yo te puedo ayudar en la primera parte y tal vez no sea lo que buscas ya que de esta forma se refresca toda la pagina.

    Bueno, para esto uso la funcion __doPostBack que se genera automaticamente si pones un ScriptManager en la pagina, o algun control ASP (no todos)
    Esto se puede comprobra si al generar la pagina, ves el codigo en el navegador

    Esta funcion de JS tiene dos parametros "__EVENTTARGET" y "__EVENTARGUMENT", que mas tarde se pueden capturar en el servidor.

    Para llamar a la funcion en el cliente:

    <script type="text/javascript" language="javascript">
    
            function llamarServidor() {
    
                __doPostBack("MiFuncion", ""); 
    
            }
    
        </script>
    
    

    Despues uso un Button para lanzar la funcion:
    <input id="Button1" type="button" value="button"  onclick="llamarServidor()"/>
    
    

    Para capturarla en el servidor:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
            'Capturamos el parametro __EVENTTARGET
    
            'Si coincide con el valor pasado desde JS pues realiza una accion
    
            If My.Request.Params("__EVENTTARGET") = "MiFuncion" Then
    
                'en este caso lanzamos un alert
    
                My.Response.Write("<script>alert('me llamaste')</script>")
    
            End If
    
        End Sub
    
    
    Despues tendrias que ver la forma de devolver el HolaMundo, pero supongo que la respuesta esta en el objeto My.response que es el que se encarga de la respuesta del servidor hacia el cliente.

    Espero que te sirva

    Saludos
    Luis velez



    miércoles, 8 de abril de 2009 9:22

Todas las respuestas

  • En alguna ocasión hicé algo parecido pero con PHP, lo que hacia era mediante AJAX solicitar toda la página .php y lo que tenia en ese archivo era precisamente una función que recuperaba información desde la base de datos y retornaba precisamente la información.

    Tal vez pueda funcionar de la misma forma en ASP.NET
    En la teoría, la teoría es igual a la práctica; en la práctica no
    miércoles, 8 de abril de 2009 4:33
  • Hola manuel

    Yo te puedo ayudar en la primera parte y tal vez no sea lo que buscas ya que de esta forma se refresca toda la pagina.

    Bueno, para esto uso la funcion __doPostBack que se genera automaticamente si pones un ScriptManager en la pagina, o algun control ASP (no todos)
    Esto se puede comprobra si al generar la pagina, ves el codigo en el navegador

    Esta funcion de JS tiene dos parametros "__EVENTTARGET" y "__EVENTARGUMENT", que mas tarde se pueden capturar en el servidor.

    Para llamar a la funcion en el cliente:

    <script type="text/javascript" language="javascript">
    
            function llamarServidor() {
    
                __doPostBack("MiFuncion", ""); 
    
            }
    
        </script>
    
    

    Despues uso un Button para lanzar la funcion:
    <input id="Button1" type="button" value="button"  onclick="llamarServidor()"/>
    
    

    Para capturarla en el servidor:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
            'Capturamos el parametro __EVENTTARGET
    
            'Si coincide con el valor pasado desde JS pues realiza una accion
    
            If My.Request.Params("__EVENTTARGET") = "MiFuncion" Then
    
                'en este caso lanzamos un alert
    
                My.Response.Write("<script>alert('me llamaste')</script>")
    
            End If
    
        End Sub
    
    
    Despues tendrias que ver la forma de devolver el HolaMundo, pero supongo que la respuesta esta en el objeto My.response que es el que se encarga de la respuesta del servidor hacia el cliente.

    Espero que te sirva

    Saludos
    Luis velez



    miércoles, 8 de abril de 2009 9:22
  • Hola Manuel

    Podrias utilizar PageMethods. Te dejo un ejempl basico para que sigas investigando
    Dependiendo de como estas trabajando (por ejemplo con VS2005 y ASP.NET 2.0.. en adelante) podrias utilizar PageMethods (que es para ASP.NET AJAX)

    Aqui lo tienes... 
    ----------------------------------------------------------------
    EJEMPLO BASICO DE PAGEMETHODS
    ----------------------------------------------------------------
    Tenemos una pagina que insertamos un scripManager con al propiedad
      ...<asp:ScriptManager ID="sm1" runat="server" 
                EnablePageMethods="True">
            </asp:ScriptManager>

    en la misma pagina tienes un metodo estatico y con el atributo WebMethod (idem webservice)
        <System.Web.Services.WebMethod()> _
        Public Shared Function Metodo1() As String
              Return Now.ToLongTimeString
        End Function

    Tenemos un script del lado del cliente
     <script type="text/javascript">
    function EjemploMetodo() {
          var param1 = "demo";
          PageMethods.Metodo1(OnMetodo1Ok, OnMetodo1Error);
       }

       function OnMetodo1Ok(resultado) {
          // Dispaly "thank you."
          $get("TextBox1").value = resultado;
          $get("Label1").innerHTML = resultado;
          
       }

       function OnMetodo1Error(error) {
          alert(error.get_message());
       }
      </script>

    Espero que te sirva de ayuda o guia.



    Enlaces:
    --------------

    Espero que te sirva de ayuda o guia


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja
    miércoles, 8 de abril de 2009 19:28
  • hOLA LUIS Velez
    graciaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaas
    este articulo me salvó la vidaa
    era lo que estaba buscandoo

    graciaaaaaaaaas

    jueves, 2 de julio de 2009 17:10
  • Gracias por tu aporte, funcionando al 100%

    No logre implementar PageMethod ya que en la funcion que queria implementar tenia que ser Shared, y al implementar:

    $.ajax({
                    type: "POST",
                    url: "page.aspx/method",
                    data: "{}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (mensaje) { alert("retorno del metodo: " + mensaje.d); },
    });

    de jQuery no resulto lo que esperaba. La implementacion de provocar un POSTBACK y recuperarlo con EVENTTARGET es cencilla facil y funcional...

    martes, 18 de diciembre de 2012 3:52