以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;
}
}