ASP.NET has grown very rich day by day. Recently Microsoft has introduced JQuery
as a primary javascript development tool for client end application. Even though there is a number of flexibility in ASP.NET AJAX applications, many developers do seek place to actually call a page using normal AJAX based application. In this post I will cover how you can invoke an ASP.NET page method directly from your own AJAX library.
What are page methods?
A Page method is a method that is written directly in a page. It is generally called when the actual page is posted back and some event is raised from the client. The pageMethod is called directly from ASP.NET engine.
What is a WebMethod?
A WebMethod is a special method attribute that exposes a method directly as XML service. To implement PageMethod we first need to annotate our method as WebMethod.
Steps to Create the application :
1. Start a new ASP.NET Project.
2. Add JQuery
to your page. I have added a special JQuery plugin myself which stringify a JSON object. The post looks like below :
(function ($) { $.extend({ toJson: function (obj) { var t = typeof (obj); if (t != "object" || obj === null) { // simple data type if (t == "string") obj = '"' + obj + '"'; return String(obj); } else { // recurse array or object var n, v, json = [], arr = (obj && obj.constructor == Array); for (n in obj) { v = obj[n]; t = typeof (v); if (t == "string") v = '"' + v + '"'; else if (t == "object" && v !== null) v = JSON.stringify(v); json.push((arr ? "" : '"' + n + '":') + String(v)); } return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}"); } } }); // extend plugin scope $.fn.extend({ toJson: $.toJson.construct }); })(jQuery);
The code actually extends JQuery to add a method called toJSON
to its prototype.
3. Add the server side method to the Default.aspx
page. For simplicity we actually return the message that is received from the client side with some formatting.
[WebMethod] public static string DisplayTime(string message) { // Do something return string.Format("Hello ! Your message : {0} at {1}", message, DateTime.Now.ToShortTimeString()); }
Remember : You should make this method static, and probably should return only serializable object.
4. Add the following Html which actually puts one TextBox which takes a message and a Button to call server.
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> <h2> Welcome to ASP.NET! </h2> <p> Write Your message Here : <input type="text" id="txtMessage" /> </p> <p> <input type="button" onclick="javascript:callServer()" value="Call Server" /> </p> </asp:Content>
Once you add this html to your default.aspx page, add some javascript to the page. We add the JQuery and our JSONStringify code to it.
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> <script src="Scripts/JSONStringify.js" type="text/javascript"></script> <script type="text/javascript"> function callServer() { var objdata = { "message" : $("#txtMessage").val() }; $.ajax({ type: "POST", url: "Default.aspx/DisplayTime", data: $.toJson(objdata), contentType: "application/json; charset=utf-8", dataType: "json", success: function (msg) { alert(msg.d); }, error: function (xhr, ajaxOptions) { alert(xhr.status); } }); } </script>
The above code actually invokes a normal AJAX call to the page. You can use your own library of AJAX rather than JQuery to do the same. On success, it returns the serializable object to msg.d.
Output:
Thats all Folks! !
Things to Remember :
1. WebMethod should be a static method.
2. WebMethod should always return a serializable object.
3. Remember to send strings to a JSON object as the Server side will deserialize the object using JavascriptSerializer.
You can download the Sample Application from here.
I hope you will like this post.
Thanks
What if you need to send a complex object to the WebMethod like a Person object?
You can do it the same way you do for a data type. The only thing you need is to serialize Person to JSON.