Implementing Client Callbacks (AJAX) in ASP.NET 2.0 is actually really simple to do as long as you know a little JavaScript. Heres is a small example of using a Client Callback from within a User Control. I’ve tested this example with IE6 and Firefox 1.5

<%@ Control Language="VB" ClassName="ClientCallbackControl"%>
 <%@ Implements Interface="System.Web.UI.ICallbackEventHandler"%>
 <script runat="server">
     ''This is the variable that holds the client callback
     ''results that will be returned to the client.
     Dim MyCallbackResult As String
 
     ''This is the server-side function that is called when the
     ''client callback results are returned to the browser.
     Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
         Return MyCallbackResult
     End Function
 
     ''This is the server-side function that is called when the
     ''client callback is fired off.
     Public Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
         MyCallbackResult = Now.ToString
     End Sub
 
     Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
         ''Get Client Side ID of this instance of the User Control
         ''This will be used to Prefix all the JavaScript functions
         ''this control uses so that you can have multiple instances
         ''of this control on the same page.
         Dim strJSCallbackPrefix As String = Me.ClientID
 
         ''Get the JavaScript that will callback to the server
         Dim cm As ClientScriptManager = Page.ClientScript
         Dim cbReference As String
         cbReference = cm.GetCallbackEventReference(Me, _
             "arg", _
             strJSCallbackPrefix & "ReceiveServerData", _
             "context")
 
         ''Declare the function that will be called to fire off a
         ''client callback to the server.
         Dim callbackScript As String = _
             "function " & strJSCallbackPrefix & "CallServer(arg, context){" & cbReference & "; }"
         cm.RegisterClientScriptBlock(Me.GetType(), strJSCallbackPrefix & "CallServer", callbackScript, True)
 
         ''Declare the function that will recieve the client callback
         ''results from the server.
         Dim strReceiveServerData As String = _
             "function " & strJSCallbackPrefix & "ReceiveServerData(arg, context){context.innerHTML = arg;}"
         cm.RegisterClientScriptBlock(Me.GetType, strJSCallbackPrefix & "ReceiveServerData", strReceiveServerData, True)
 
 
         ''Set the JavaScript that is run when the button is clicked
         ''This sends the context of lblMessage1 so that the
         ''ReceiveServerData function can change its value to what is
         ''returned from the server.
        Button1.OnClientClick = _
             strJSCallbackPrefix & "CallServer(1, document.getElementById('" & lblMessage1.ClientID & "')); " & _
             "return false;"
 
 
         ''Load lblMessage1 with it's value on initial load of the page.
         RaiseCallbackEvent(1)
         lblMessage1.Text = GetCallbackResult()
     End Sub
 </script>
 <asp:Button ID="Button1" runat="server" Text="Get DateTime Stamp" />
 <asp:Label runat="server" ID="lblMessage1"></asp:Label>