2009-08-24 6 views
7

J'ai un appel très simple à un PageMéthode. Lorsque je passe en revue ma méthode PageMethod dans mon fichier .cs, la valeur semble comme prévu. Cependant, du côté client, j'obtiens un résultat indéfini. Des idées? Cela devrait être horriblement simple.PageMethods renvoyant un résultat non défini?

Voici mes js: (EnablePageMethods="true" dans ma page ASPX)

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

Et voici mon C#:

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

Je suppose que l'EnablePageMethods attribut est sur un contrôle ScriptManager dans la page? –

+0

Oui, à votre première question. – Clay

+0

Non, à votre deuxième question, j'ai lu cela plus tôt ... je n'ai pas encore trouvé de réponse à cette question. Merci. – Clay

Répondre

1

Vérifiez le screencast suivant. Il explique comment appeler les PageMethods en utilisant JQuery:

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

+0

Merci, cela a fonctionné. Je voudrais comprendre pourquoi l'utilisation de jQuery pour faire un appel JSON a fonctionné mais pas la "façon Microsoft". Merci pour votre temps! – Clay

+0

Je vais essayer avec la bibliothèque de Microsoft et vous le faire savoir. Merci! – azamsharp

+0

Cela semble très bien, j'espère que vous avez plus de chance que moi! :) – Clay

3

Vous avez à passer dans une fonction de rappel qui sera exécuté sur le succès/Exception. Donc, dans ce cas, ce serait quelque chose comme ça

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

function onError(desc) { 
} 

function onSuccess(result) { 
} 

Je vérifierais la documentation pour l'utilisation exacte.

+0

J'ai fait ça et ça ne semble pas aider. – Clay

7

Voici la réponse sur comment appeler PageMethods en utilisant MS Ajax. Assurez-vous d'abord que vous avez téléchargé la dernière bibliothèque Ajax à partir du site Web 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"; 
     } 

C'est à peu près tout!

+0

Merci, la syntaxe ici est légèrement différente de ce que j'utilisais, je vais essayer. – Clay

+0

+1 Cela fonctionne en effet. – Steffen

+0

que faire si la fonction a des paramètres? – bebosh

0

This est un excellent article concret sur le sujet.

Pour moi, le code suivant fonctionne.

J'ai une page qui traite un fichier Excel de manière asynchrone; tandis que le traitement, la fonction EsperarFinDelCargue() sondages un PageMethod appelé CargueFinalizo() chaque seconde pour voir si le traitement est terminé. Lorsque le traitement est terminé, une redirection a lieu.

OnCallFinalizoComplete est la fonction de rappel pour l'appel PageMethod, vous devez donc utiliser l'objet résultant.

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

Et le code PageMethod ici dans le 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> 
Questions connexes