2009-08-24 19 views
7

Ho una chiamata molto semplice a un PageMethod. Quando passo il mio PageMethod nel mio file .cs, il valore appare come previsto. Tuttavia, sul lato client ottengo un risultato indefinito. Qualche idea? Questo dovrebbe essere orribilmente semplice.PageMethods che restituisce un risultato non definito?

Ecco la mia JS: (EnablePageMethods="true" nella mia pagina ASPX)

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

Ed ecco la mia C#:

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

lo prendo le EnablePageMethods attributo è su un controllo ScriptManager nella tua pagina? –

+0

Sì, alla tua prima domanda. – Clay

+0

No, alla tua seconda domanda, ho letto prima ... non ho ancora trovato una risposta a questo qui. Grazie. – Clay

risposta

1

controllare il seguente screencast. Spiega come chiamare i PageMethods utilizzando jQuery:

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

+0

Grazie, ha funzionato. Mi piacerebbe capire perché usare jQuery per far funzionare una chiamata JSON ma il "modo Microsoft" no. Grazie per il tuo tempo! – Clay

+0

Proverò con la libreria Microsoft e ti farò sapere. Grazie! – azamsharp

+0

Sembra fantastico, spero che tu abbia più fortuna di me! :) – Clay

3

Hai per passare in una funzione di callback che dovrebbe essere eseguito sul successo/Exception. Quindi in questo caso, sarebbe qualcosa di simile

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

function onError(desc) { 
} 

function onSuccess(result) { 
} 

Vorrei controllare la documentazione per l'utilizzo esatto.

+0

Ho fatto questo e non sembra aiutare. – Clay

7

Ecco la risposta su come chiamare PageMethods utilizzando MS Ajax. Innanzitutto assicurati di aver scaricato l'ultima libreria Ajax dal sito Web di 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"; 
     } 

Questo è praticamente tutto!

+0

Grazie, la sintassi qui è leggermente diversa da quella che stavo usando, darò uno scatto. – Clay

+0

+1 Funziona davvero. – Steffen

+0

cosa succede se la funzione ha parametri? – bebosh

0

This è un grande e concreto articolo sull'argomento.

Per me, il seguente codice funziona.

Ho una pagina che elabora un file excel in modo asincrono; durante l'elaborazione, la funzione EsperarFinDelCargue() sondaggi un PageMethod chiamato CargueFinalizo() ogni secondo per vedere se l'elaborazione è terminata. Al termine dell'elaborazione, viene effettuato un reindirizzamento.

OnCallFinalizoComplete è la funzione di callback per la chiamata di PageMethod, quindi è necessario utilizzare l'oggetto risultante.

<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> 

Ed ecco il codice PageMethod nella 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> 
Problemi correlati