Demonstrates an ASP.NET Web page that implements a client callback. For more information, see Implementing Client Callbacks Without Postbacks in ASP.NET Web Pages.
Example
The following code example is in two parts. The first part of the example shows an ASP.NET Web page (the .aspx page). The second part shows the corresponding code-behind file (the .aspx.vb file).
Visual BasicВ | Copy Code |
---|---|
' ClientCallback.aspx page <%@ Page Language="VB" AutoEventWireup="false" CodeFile="ClientCallback.aspx.vb" Inherits="ClientCallback" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> <script type="text/javascript"> function LookUpStock() { var lb = document.forms[0].ListBox1; var product = lb.options[lb.selectedIndex].text CallServer(product, ""); } function ReceiveServerData(rValue) { Results.innerText = rValue; } </script> </head> <body> <form id="form1" runat="server"> <div> <asp:ListBox ID="ListBox1" Runat="server"></asp:ListBox> <br /> <br /> <button onclick="LookUpStock()">Look Up Stock</button> <br /> <br /> Items in stock: <span ID="Results"></span> <br /> </div> </form> </body> </html> ' ClientCallback.aspx.vb code-behind file Partial Class ClientCallback Inherits System.Web.UI.Page Implements System.Web.UI.ICallbackEventHandler Protected catalog As ListDictionary Sub Page_Load(ByVal sender As Object, ByVal e As _ System.EventArgs) Handles Me.Load Dim cbReference As String cbReference = Page.ClientScript.GetCallbackEventReference(Me, _ "arg", "ReceiveServerData", "context") Dim callbackScript As String = "" callbackScript &= "function CallServer(arg, context) { " & _ cbReference & "} ;" Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), _ "CallServer", callbackScript, True) ' Populate List Dictionary with invented database data catalog = New ListDictionary() catalog.Add("monitor", 12) catalog.Add("laptop", 10) catalog.Add("keyboard", 23) catalog.Add("mouse", 17) ListBox1.DataSource = catalog ListBox1.DataTextField = "key" ListBox1.DataBind() End Sub Public Function RaiseCallbackEvent(ByVal eventArgument _ As String) As String Implements _ System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent Dim returnValue As String If catalog(eventArgument) Is Nothing Then returnValue = "-1" Else returnValue = catalog(eventArgument).ToString() End If Return returnValue End Function End Class |
The Web page emulates a database lookup to determine the number of items that are available, or in stock, for a series of products (monitors, keyboards, and so on). To simplify this code example, the database is represented by a dictionary list that contains a small set of items. For each item in the table, the key is the item name (such as monitor) and the value is the number of items that are in stock. In a production application, a database would be used instead.
When the page runs, a
The code-behind page adds client-side script to the page via the
The client callback invokes the
Security Note |
---|
When you use this feature, there are potential security threats. Callback arguments are not validated and therefore should be considered unsafe. You should always check the contents of the arguments before using them. For details, see Script Exploits Overview. |