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

被折叠的 条评论
为什么被折叠?



