Question

I have a very simple call to a PageMethod. When I step through my PageMethod in my .cs file, the value looks as expected. However, on the client side I get an undefined result. Any ideas? This should be horribly simple.

Here is my js: (EnablePageMethods="true" in my ASPX page)

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

And here is my C#:

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

Solution

Check out the following screencast. It explains how to call the PageMethods using JQuery:

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

OTHER TIPS

Here is the answer on how to call PageMethods using MS Ajax. First make sure you have downloaded the latest Ajax library from the MS website.

<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"; 
        }

That is pretty much it!

You've to pass in a callback function that would be executed on Success / Exception. So in this case, it would be something like this

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

function onError(desc) {
}

function onSuccess(result) {
}

I would check the documentation for the exact usage.

This is a great and concrete article on the subject.

For me, the following code is working.

I have a page that processes an excel file asynchronously; while processing, the function EsperarFinDelCargue() polls a PageMethod called CargueFinalizo() each second to see if processing has ended. When processing finishes, a redirection takes place.

OnCallFinalizoComplete is the callback function for the PageMethod invocation, so there is where you need to use the resulting object.

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

And here is the PageMethod code in the aspx:

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

     <script type="text/javascript">
       function Generate()
       {              
           var result = PageMethods.GenerateOTP(your parameter, function (response)
           {
               alert(response);
           });
       }
</script>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top