2009-08-24 24 views
7

Tengo una llamada muy simple a un PageMethod. Cuando paso por mi PageMethod en mi archivo .cs, el valor se ve como se esperaba. Sin embargo, en el lado del cliente obtengo un resultado indefinido. ¿Algunas ideas? Esto debería ser terriblemente simple.PageMethods devuelve resultado indefinido?

Aquí está mi JS: (EnablePageMethods="true" en mi página ASPX)

function test() { 
    alert(PageMethods.MyMethod("Joe Blow")); 
} 

Y aquí es mi C#:

public partial class test : System.Web.UI.Page 
{ 
    [WebMethod] 
    public static string MyMethod(string name) 
    { 
     return "Hello " + name; 
    } 
} 
+0

lo tomo las EnablePageMethods atribuyen está en un control ScriptManager en su página? –

+0

Sí, a su primera pregunta. – Clay

+0

No, a su segunda pregunta, leí eso antes ... hasta ahora no he encontrado una respuesta a esto. Gracias. – Clay

Respuesta

1

revisa el siguiente screencast. En él se explica cómo llamar a los PageMethods usando jQuery:

http://www.highoncoding.com/Articles/430_Calling_Page_Methods_Using_JQuery_and_Returning_JSON_Result.aspx

+0

Gracias, esto funcionó. Me gustaría entender por qué usar jQuery para hacer una llamada JSON funcionó, pero el "camino de Microsoft" no funcionaba. ¡Gracias por tu tiempo! – Clay

+0

Lo probaré con la biblioteca de Microsoft y le haré saber. ¡Gracias! – azamsharp

+0

Suena genial, ¡espero que tengas mejor suerte que yo! :) – Clay

3

Tienes que pasar en una función de devolución de llamada que se ejecuta en el éxito/Excepción. Entonces, en este caso, sería algo como esto

PageMethods.MyMethod("Joe Blow", onSuccess, onError); 

function onError(desc) { 
} 

function onSuccess(result) { 
} 

Me gustaría consultar la documentación del uso exacto.

+0

He hecho esto y no parece ayudar. – Clay

7

Aquí está la respuesta sobre cómo llamar a PageMethods utilizando MS Ajax. Primero asegúrese de haber descargado la última biblioteca de Ajax del sitio web de MS.

<asp:ScriptManager ID="sm1" runat="server" EnablePageMethods="true"> 
    </asp:ScriptManager> 

    <input type="button" value="Greeting" onclick="greetings()" /> 

<script language="javascript" type="text/javascript"> 

    function greetings() { 

     PageMethods.GreetingFromPage(function(response) { 

      alert(response); 

     }); 

    } 


</script> 

    [WebMethod] 
     public static string GreetingFromPage() 
     { 
      return "greeting from page"; 
     } 

Eso es más o menos!

+0

Gracias, la sintaxis aquí es ligeramente diferente de lo que estaba usando, voy a dar una oportunidad. – Clay

+0

+1 Esto realmente funciona. – Steffen

+0

¿y si la función tiene parámetros? – bebosh

0

This es un artículo genial y concreto sobre el tema.

Para mí, el siguiente código funciona.

Tengo una página que procesa un archivo de Excel de forma asíncrona; mientras que el procesamiento, la función EsperarFinDelCargue() urnas un PageMethod llama CargueFinalizo() cada segundo para ver si el procesamiento ha terminado. Cuando el procesamiento finaliza, se produce una redirección.

OnCallFinalizoComplete es la función de devolución de llamada para la invocación de PageMethod, por lo que es allí donde necesita utilizar el objeto resultante.

<script type="text/javascript">  

    function EsperarFinDelCargue() 
    {   
     PageMethods.CargueFinalizo(OnCallFinalizoComplete);    
     if($('#<%=this.hidCargueFinalizado.ClientID %>').val() == "SI") 
     { 
      document.location = "CargarPanelHCP.aspx"; 
     } 
     else 
     { 
      var t=setTimeout("EsperarFinDelCargue()",1000);     
     } 
    } 

    function OnCallFinalizoComplete(result,contexto,CargueFinalizo) 
    {    
     $('#<%=this.hidCargueFinalizado.ClientID %>').val(result);    
    } 
</script> 

Y aquí está el código PageMethod en el aspx:

[System.Web.Services.WebMethod] 
public static string CargueFinalizo() 
{ 
    //Whatever you need 
    return HttpContext.Current.Session["ResultadoCarguePanel"] != null ? "SI" : "NO"; 
} 
0
Try This it will work fine 

    <script type="text/javascript"> 
     function Generate() 
     {    
      var result = PageMethods.GenerateOTP(your parameter, function (response) 
      { 
       alert(response); 
      }); 
     } 
</script> 
Cuestiones relacionadas