Page method is web service method added to aspx page rather than in asmx page. Sometimes we just want a web service functionality for a single page and we don't want to use any separate web service for the shake of complexity. We need such web service like functionality when use ajax. For example when we use dynamic populate control from ajax control toolkit we need to populate data dynamically. In that case the populate control needs data from web service but if we don't want to introduce web service for keeping our system simple we can implement the code for web service in the aspx page. To declare a page method web service use the following script in the aspx page.
<head runat="server">
<script runat="server">
[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]
public static string Test()
{
return "sohel rana";
}
</script>
<title>Page Title</title>
</head>
You can also declare the web service method in code behind file. In that case the method will be public and static and should be marked with WebMethod attribute as shown below
protected void Page_Load(object sender, EventArgs e)
{
}
[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]
public static string Test()
{
return "your data";
}
Now we need to know how we'll call this page methods using javascript. There are two ways to call the page mehtod Test. One is call via PageMethods and another is to use ajax control toolkit's built-in feature. To use PageMethods you need to set the ScriptManager's EnablePageMethods to true as shown below.
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
This will generate a PageMethods javascript object with which we can call the Test method as shown below:
<script type="text/javascript">
function CallWebServiceMethod() {
PageMethods.Test(complete);
}
function complete(val) {
alert(val);
}
</script>
<input type="button" value="Click" onclick="CallWebServiceMethod()" />
The second option will be to use Ajax Control Toolkit's built-in feature. Obviously this option will be available if you are using Ajax Control Toolkit. For example in the following code snippet the Dynamic Populate extender control will call the service method Test and on completion of invocation of Test method the control will update the panel with id p1.
<cc1:DynamicPopulateExtender ID="dpe" runat="server" ServiceMethod="Test" TargetControlID="p1">
</cc1:DynamicPopulateExtender>
<asp:Panel ID="p1" runat="server"></asp:Panel>
But my personal opinion is that may be the Page method should not use as I'm skeptical about the performance. May be I need to dig more on performance.