以northwind数据库为例。选择分类下拉框的一项后,无刷新更改产品下拉框的显示
前台代码:

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

<!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>无标题页</title>

<script type="text/javascript">...
function CallServer(args,context)

...{
context.innerHTML = "Loading...";
<%= ClientScript.GetCallbackEventReference(this,"args","GetServerData","context") %>
}
function GetServerData(result,context)

...{
context.innerHTML = result;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="ddlCategory" runat="server"></asp:DropDownList>
<span id="pnlProduct">
<asp:DropDownList ID="ddlProduct" runat="server"></asp:DropDownList>
</span>
</div>
</form>
</body>
</html>
后台代码:
using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Configuration;
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;

public partial class _Default : System.Web.UI.Page,ICallbackEventHandler

...{
protected string callbackResult;

protected void Page_Load(object sender, EventArgs e)

...{
if (!IsPostBack)

...{
BindToCategory();
this.ddlCategory.Attributes.Add("onchange", "CallServer(this.value,pnlProduct)");
this.ddlProduct.Items.Add(new ListItem("--产品--", "-1"));
}
}


/**//// <summary>
/// 绑定分类
/// </summary>
private void BindToCategory()

...{
SqlConnection conn = new SqlConnection("Server=(local);database=northwind;uid=sa;pwd=123");
SqlDataAdapter sda = new SqlDataAdapter("SELECT categoryID,categoryName FROM categories", conn);
DataTable dt = new DataTable();
sda.Fill(dt);
this.ddlCategory.DataSource = dt;
this.ddlCategory.DataTextField = "categoryName";
this.ddlCategory.DataValueField = "categoryID";
this.ddlCategory.DataBind();
this.ddlCategory.Items.Insert(0, new ListItem("--分类--", "-1"));
}

private void BindToProduct(int categoryID)

...{
SqlConnection conn = new SqlConnection("Server=(local);database=northwind;uid=sa;pwd=123");
SqlDataAdapter sda = new SqlDataAdapter("SELECT productID,productName FROM products WHERE categoryID=" + categoryID, conn);
DataTable dt = new DataTable();
sda.Fill(dt);
this.ddlProduct.DataSource = dt;
this.ddlProduct.DataTextField = "productName";
this.ddlProduct.DataValueField = "productID";
this.ddlProduct.DataBind();
if (ddlProduct.Items.Count == 0)

...{
this.ddlProduct.Items.Add(new ListItem("--产品--", "-1"));
}
}

private string RenderElement(Control control)

...{
StringWriter writer = new StringWriter();
HtmlTextWriter output = new HtmlTextWriter(writer);
control.RenderControl(output);
output.Flush();
output.Close();
string htmlCode = writer.ToString();
writer.Close();
return htmlCode;
}

void ICallbackEventHandler.RaiseCallbackEvent(string str)

...{
this.callbackResult = str;
}

string ICallbackEventHandler.GetCallbackResult()

...{
int categoryID = Convert.ToInt32(callbackResult);
BindToProduct(categoryID);
callbackResult = RenderElement(this.ddlProduct);
return callbackResult;
}
}
