Client Callbacks fascinate me because it works differently from the standard postback of the ASP.NET Model. The MSDN documentation for Client Callbacks: In the default model for ASP.NET Web pages, the user interacts with a page and clicks a button or performs some other action that results in a postback. The page and its controls are re-created, the page code runs on the server, and a new version of the page is rendered to the browser. However, in some situations, it is useful to run server code from the client without performing a postback. If the client script in the page is maintaining some state information (for example, local variable values), posting the page and getting a new copy of it destroys that state. Additionally, page postbacks introduce processing overhead that can decrease performance and force the user to wait for the page to be processed and re-created.
Client Callbacks can also be thought of as another implementation of pages to be asynchronous. I’ve had a situation wherein I needed to pass array values back to the client without necessarily needing to postback to the server.
I implemented callbacks in the following manner:
1. Implement System.Web.UI.ICallbackEventHandler
2. global page variable:
public string sCallBackFunctionInvocation = "";
3. In the page load event
protected void Page_Load(object sender, EventArgs e)
{
sCallBackFunctionInvocation = Page.ClientScript.GetCallbackEventReference(this, "recievedParameter", "clientJSFunctionAfterCallBack", "context");
}
4. Implement the other System.Web.UI.ICallbackEventHandler members (you cannot change the method signature); in C#, right-click the name of the interface.
In Visual Studio:

string ICallbackEventHandler.GetCallbackResult()
{
string stringValueAfterCallBack = "hello from call back."
return stringValueAfterCallBack ;
}
void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
{
//process eventArgument. Treat event argument as your client array.
}
5. create client-side javascript that will pass your client-side array
<script language="javascript" type="text/javascript">
function HandleCallBack(clientArrayObject)
{
var recievedParameter = clientArrayObject;
var context = '';
<%=sCallBackFunctionInvocation%>
}
function clientJSFunctionAfterCallBack(stringValueAfterCallBack , context)
{
}
</script>
Now, just call HandleCallBack on the client side javascript based on your client-side event.