Click here to Skip to main content
Licence CPOL
First Posted 17 Nov 2009
Views 38,922
Downloads 1,219
Bookmarked 62 times

Ajax DLL

By | 13 Jul 2011 | Article
Library to call server side function from JavaScript

Introduction

Ajax DLL is a library developed using .NET 2005 for ASP.NET 2.0/3.0/3.5/4.0. It is used to call Server side methods from JavaScript. You can pass the method parameter value from JavaScript. A parameter can be a variable or an object.

In the given example, I have used the parameter as a string variable, an array object and a class object. A benefit of this DLL is that you can use it at UserControl level, so if you have some method in UserControl and you want to call it via JavaScript, you can achieve it using this DLL. A drawback of this DLL is that you cannot access your server control in your method, because Page Life Cycle is not involved during the method call. But you can access your server control from JavaScript and assign the value which will be returned by Ajax method.

Using the Code

It’s very simple to use Ajax DLL. You need to create a web application or a web site and add reference of Ajax.dll which is in the attached file.

Once a DLL has been added into your application, you need to place a one line code on Page_Load event as below:

Page_Load

This code will register your page class in DLL with all your AJAX method[s] written in the page class, which are given in the image below. Check the below image, you will find that the methods have been annotated with an attribute Ajax.AjaxMethod. You need to annotate with an attribute to the methods which you want to call from JavaScript.

There are 5 optional parameters with the Ajax.AjaxMethod attribute:

  1. Method name: A method which you want to call from JS. Default will be the same method name which you have created.
  2. Js Callback method name: On Successful End Request of the Ajax call. Default will be the Callback_<your method name>.
  3. Js Error method Name: Any Error at the time of End Request of the Ajax call. Default will be the Error_<your method name>.
  4. Loading Text: Which text you want to show. Default Text is string.Empty.
  5. Asynchronous Call: Boolean value, used to make your call synchronous from JavaScript. Default Value is True.
Methods.JPG

Once the methods have been written, you can call all these methods from JS as defined in the first parameter of Ajax.AjaxMethod. For that, you can write JS methods as below:
Page_Load

Check here the CallTest1() function, from the function PassArrayObject method is called as defined in the first parameter of Ajax attribute. The parameter value and the method name should be the same. Also check the last function CallReturnEvenOdd(), for which callback method or error method is not required, because its server method ReturnEvenOdd is defined with "IsAsync=false" parameter (check the previous image). So value will be returned to the same function CallReturnEvenOdd().

At last, you need to apply some configuration in the web.config file as below:

Find the HTML code here:

 <%@ Page Language="C#" AutoEventWireup="true" 
Codebehind="Default.aspx.cs" Inherits="DemoAjaxApp._Default" %>

<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, 
	Culture=neutral, PublicKeyToken=31bf3856ad364e35"
    	Namespace="System.Web.UI" TagPrefix="asp" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Ajax Demo</title>

    <script language="javascript" type="text/javascript">
			 
			function CallTest()
			{
				var id=document.getElementById('txtClientId').value;
				Test(id);
			}
			function NameLength(obj)
			{
				var i=0;
				var newdiv = document.getElementById('EmpData');
				newdiv.innerHTML = "";
				if(obj == null)
				{	
			        newdiv.innerHTML = "No Employee Found";
			        return;
			    	}
				mytable = document.createElement("table");
				mytable.cellSpacing = "0px";
				mytable.style.border = "1px solid #000";
				mytablebody = document.createElement("tbody");
				mycurrent_row = document.createElement("tr");
				for(i=0;i<obj.Rows[0].Columns.length;i++)
				{
					mycurrent_cell = document.createElement("td");
					currenttext = document.createTextNode
						    (obj.Rows[0].Columns[i].Name);
					mycurrent_cell.appendChild(currenttext);
					mycurrent_cell.style.border = 
							"1px solid #000";
					mycurrent_row.appendChild(mycurrent_cell);
				}	
				mytablebody.appendChild(mycurrent_row);	
				for(var j=0;j<obj.RowCount;j++)
				{
					var objRow = obj.Rows[j];
					mycurrent_row = document.createElement("tr");
					for(i=0;i<objRow.Columns.length;i++)
					{
						mycurrent_cell = 
						    document.createElement("td");
						if(objRow.Columns[i].Value != null)
							currenttext = 
							document.createTextNode
							(objRow.Columns[i].Value 
							+ " ");
						else
							currenttext = 
							document.createTextNode(" ");
						mycurrent_cell.appendChild
								(currenttext);
						mycurrent_cell.style.border = 
								"1px solid #000";
						mycurrent_row.appendChild
								(mycurrent_cell);
					}
					mytablebody.appendChild(mycurrent_row);
				}
				mytable.appendChild(mytablebody);
				newdiv.appendChild(mytable);
								
			}
			function Error_Test(obj)
			{
				alert(obj.ErrMsg);
			}
			function CallTest1()
			{
			    var x = new Array();
			    x[0] = "Mehul";
			    x[1] = "Thakkar";
			    PassArrayObject(x);
			}
			function ReturnClassObject(obj)
			{
			    alert(obj.Name);
			}
			function Error_PassArrayObject(obj)
			{
				alert(obj.ErrMsg);
			}
			function CallReturnEvenOdd() 
            		{
                		var id = document.getElementById('txtNumber').value;
                		var msg = ReturnEvenOdd(id);
                		alert(msg);
            		}
			function CallTest2()
			{
			    var x = new Object();
			    x.Name = "Mehul-Thakkar";
			    x.Phone = 25460645;
			    x.Email = "mehult@xyz.com";
			    x.JoiningDate = "15-09-2010";
			    PassClassObject(x);
			}
			function ReturnLength(obj)
			{
			    alert(obj);
			}
			function Error_PassClassObject(obj)
			{
				alert(obj.ErrMsg);
            		}

			function CallBack_ReturnArray(arrObj)
			{
			    var Total=0;
			    for(var i in arrObj)
			        Total+=parseInt(arrObj[i],10);
			        
			    alert(Total);
			}
			function CallBack_ReturnStrArray(arrObj)
			{
			    var str='';
			    for(var i in arrObj)
			        str+=arrObj[i]+"\n";
			        
			    alert(str);
			}
			function CallBack_ReturnObject(clsObj)
			{
			    alert(clsObj.Email);
			}
		    	function CallBack_ReturnFArray(arrObj)
			{
			    var Total=0;
			    for(var i in arrObj)
			        Total+=parseFloat(arrObj[i],10);
			        
			    alert(Total);
			}				
    </script>

</head>
<body>
    <form id="form1" runat="server">
     <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <div>
            <div style="border: solid 1px yellow">
                Enter Emp No Here:
                <input type="text" id="txtClientId" />
                <a href="#" onclick="CallTest()">Retrieve Emp</a>
                <div id="EmpData">
                </div>
            </div>
            <br />
            <div style="border: solid 1px blue">
                Pass Array Object:
                <a href="#" onclick="CallTest1()">Click Here</a>
                <div id="Div1">
                </div>
            </div>
            <br />
            <div style="border: solid 1px green">
                Pass Class Object:
                <a href="#" onclick="CallTest2()">Click Here</a>
                <div id="Div2">
                </div>
            </div>
            <br />
            <div style="border: solid 1px orange">
                Return Array Object:
                <a href="#" onclick="ReturnArray()">Click Here</a>
                <div id="Div3">
                </div>
            </div>
            <br />
            <div style="border: solid 1px brown">
                Return String Array Object:
                <a href="#" onclick="ReturnStrArray()">Click Here</a>
                <div id="Div5">
                </div>
            </div>
            <br />
            <div style="border: solid 1px pink">
                Return Double Array Object:
                <a href="#" onclick="ReturnFArray()">Click Here</a>
                <div id="Div6">
                </div>
            </div>
            <br />
            <div style="border: solid 1px gray">
                Return Class Object:
                <a href="#" onclick="ReturnObject()">Click Here</a>
                <div id="Div4">
                </div>
            </div>
            <br />
            <div style="border: solid 1px silver">
                Synchronous Call using AJAX:
                <input type="text" id="txtNumber" />
                <a href="#" onclick="CallReturnEvenOdd()">Click Here</a>
                <div id="Div7">
                </div>
            </div>
            <br />
            <div style="border: solid 1px red">
            Access this textbox from Ajax dll
            <asp:TextBox runat="server" ID="txt"></asp:TextBox>
            <a href="#" onclick="ControlAccess()">Get Error</a>
            </div>
        </div>
       
        <asp:UpdatePanel runat="server" ID="UP1">
            <ContentTemplate>
                <asp:TextBox runat="server" ID="txt1">
                </asp:TextBox>
                <asp:Button runat="server" ID="b1" Text="click here" OnClick="b1_Click" />
            </ContentTemplate>
        </asp:UpdatePanel>
    </form>
</body>
</html> 

Find the CS file code here:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace DemoAjaxApp
{
    public class Temp
    {
        string _name, _email;
        int _phone;

        public string Name { get { return _name; } set { _name = value; } }
        public int Phone { get { return _phone; } set { _phone = value; } }
        public string Email { get { return _email; } set { _email = value; } }

    }
    public partial class _Default : System.Web.UI.Page
    {
	[Ajax.AjaxMethod("Test", "NameLength", null, "Loading...")]
        public DataTable Test(string Id)
        {
            System.Data.SqlClient.SqlConnection con = 
            new System.Data.SqlClient.SqlConnection
		("server=mehul;Database=master;User Id=sa;Password=");
            System.Data.SqlClient.SqlDataAdapter Adp = 
            new System.Data.SqlClient.SqlDataAdapter
		("Select * from emp where no=" + Id, con);

            DataTable dt = new DataTable();
            try
            {
                Adp.Fill(dt);
                if (dt.Rows.Count > 0)
                    return dt;
                else
                    return null;
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        [Ajax.AjaxMethod("PassArrayObject", "ReturnClassObject", null, "Loading...")]
        public Temp PassArrayObject(string[] str)
        {
            Temp t1 = new Temp();
            foreach (string st in str)
                t1.Name += st;

            return t1;
        }

        [Ajax.AjaxMethod("PassClassObject", "ReturnLength", null, "Loading...")]
        public int PassClassObject(Temp str)
        {
            return str.Name.Length;
        }

        [Ajax.AjaxMethod("ControlAccess", false, false, "Loading...")]
        public void ControlAccess(string str)
        {
            txt.Text = str;
        }

        [Ajax.AjaxMethod(false)]
        public string ReturnEvenOdd(int i)
        {
            if (i % 2 == 0)
                return "Number is Even";
            else
                return "Number is Odd";
        }

        [Ajax.AjaxMethod(null, true, false, "Loading...")]
        public int[] ReturnArray()
        {
            int[] i ={ 1, 2, 3, 4 };
            return i;
        }

        [Ajax.AjaxMethod]
        public string[] ReturnStrArray()
        {
            string[] str ={ "\\'1\\'", "2", "3", "4" };
            return str;
        }

        [Ajax.AjaxMethod(null, true, false, "Loading...")]
        public double[] ReturnFArray()
        {
            double[] i ={ 1.423, 2.543, 3.765, 4.65 };
            return i;
        }

        [Ajax.AjaxMethod(null, true, false, null)]
        public Temp ReturnObject()
        {
            Temp obj = new Temp();
            obj.Name = "hello";
            obj.Phone = 420840;
            obj.Email = "hello@helo.com";
            return obj;
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            Ajax.Utility.GenerateMethodScripts(this);
        }

        protected void b1_Click(object sender, EventArgs e)
        {
            txt1.Text = "hello";
        }
    }
}

History

  • 9th Jul, 2011: Article updated
    1. No need to add extensions "ajax" & "ajaxj" in IIS.
    2. "ShowLoading" parameter is removed. If you don't want to display loading message, pass string.empty or null.
    3. New Parameter "IsAsync" is introduced, default value is true. If false, then it will make synchronize call from JavaScript. No Callback or Error method is required to handle it.
    4. Less JS rendering. Performance is improved.
  • 9th February, 2010: Article updated
  • 17th November, 2009: Initial post

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Mehul M Thakkar

Technical Lead

India India

Member

Mehul Thakkar is having 8 yrs of experience in IT industry. He is having good command over Ms .Net and Ms Sql Server

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
QuestionWebMethod PinmemberAndrei Bozantan2:11 15 Jul '11  
AnswerRe: WebMethod [modified] PinmemberMehul M Thakkar22:07 15 Jul '11  
QuestionNice effort PinmemberPranay Rana19:26 14 Jul '11  
GeneralIIS 7 and Ajax.dll Pinmemberblablablalolrawr2:12 13 Apr '11  
General'Ajax.Utility' does not contain a definition for 'GenerateMethodScripts' PinmemberMember 43355772:30 16 Jun '10  
GeneralRe: 'Ajax.Utility' does not contain a definition for 'GenerateMethodScripts' PinmemberMehul M Thakkar18:43 20 Jun '10  
GeneralRe: 'Ajax.Utility' does not contain a definition for 'GenerateMethodScripts' PinmemberMember 37653574:56 7 Jul '10  
GeneralRe: 'Ajax.Utility' does not contain a definition for 'GenerateMethodScripts' PinmemberMehul M Thakkar18:55 7 Jul '10  
GeneralRe: 'Ajax.Utility' does not contain a definition for 'GenerateMethodScripts' PinmemberMember 37653573:38 8 Jul '10  
GeneralRe: 'Ajax.Utility' does not contain a definition for 'GenerateMethodScripts' PinmemberMehul M Thakkar18:29 8 Jul '10  
GeneralRe: 'Ajax.Utility' does not contain a definition for 'GenerateMethodScripts' PinmemberMember 37653571:39 9 Jul '10  
GeneralRe: 'Ajax.Utility' does not contain a definition for 'GenerateMethodScripts' PinmemberMehul M Thakkar19:01 11 Jul '10  
GeneralError When Pass Special Characters PinmemberChinni00722:58 13 May '10  
GeneralRe: Error When Pass Special Characters PinmemberMehul M Thakkar20:57 23 May '10  
GeneralRe: Error When Pass Special Characters PinmemberChinni0071:42 25 May '10  
GeneralRe: Error When Pass Special Characters PinmemberMehul M Thakkar19:49 25 May '10  
GeneralRe: Error When Pass Special Characters PinmemberChinni00723:45 25 May '10  
GeneralRe: Error When Pass Special Characters PinmemberMehul M Thakkar22:51 31 May '10  
GeneralRe: Error When Pass Special Characters PinmemberChinni0072:05 1 Jun '10  
GeneralRe: Error When Pass Special Characters PinmemberMehul M Thakkar20:56 1 Jun '10  
GeneralRe: Error When Pass Special Characters PinmemberChinni00723:51 7 Jun '10  
General.. Oky strange issue happening on a server set up .... Pinmembertridex2:05 4 Jan '10  
GeneralRe: .. Oky strange issue happening on a server set up .... PinmemberMehul M Thakkar17:55 4 Jan '10  
AnswerYou solution Described for server settings works perfectly!!! Pinmembertridex6:08 25 Nov '09  
GeneralThanks for the advice , will try it in a miomement... Pinmembertridex4:30 25 Nov '09  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web04 | 2.5.120517.1 | Last Updated 13 Jul 2011
Article Copyright 2009 by Mehul M Thakkar
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid