asp.net 2.0中用 ICallbackEventHandler 实现无刷新联动
vs2005beta2 中通过
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
<!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>
function ClientCallback(result, context)
{
var dropdown2 = document.forms[0].elements['DropDownList2'];
dropdown2.innerHTML= "";
var rows = result.split('|');
alert(result.length);
for (var i = 0; i < rows.length - 1; ++i)
{
var values = rows[i]
var option = document.createElement("OPTION");
option.value = values;
option.innerHTML = values;
dropdown2.appendChild(option);
}
}
function GetOrders(arg, context)
{
<%= callBack %> ;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:pubsConnectionString2 %>" SelectCommand="SELECT [au_id], [au_lname], [au_fname] FROM [authors]">
</asp:SqlDataSource>
<asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server">
</asp:DropDownList></div>
</form>
</body>
</html>
<!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>
function ClientCallback(result, context)
{
var dropdown2 = document.forms[0].elements['DropDownList2'];
dropdown2.innerHTML= "";
var rows = result.split('|');
alert(result.length);
for (var i = 0; i < rows.length - 1; ++i)
{
var values = rows[i]
var option = document.createElement("OPTION");
option.value = values;
option.innerHTML = values;
dropdown2.appendChild(option);
}
}
function GetOrders(arg, context)
{
<%= callBack %> ;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:pubsConnectionString2 %>" SelectCommand="SELECT [au_id], [au_lname], [au_fname] FROM [authors]">
</asp:SqlDataSource>
<asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server">
</asp:DropDownList></div>
</form>
</body>
</html>
using System;
using System.Data;
using System.Configuration;
using System.Collections;
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;
using System.Data.SqlClient;
public partial class Default2 : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.DropDownList1.DataSource = this.SqlDataSource1;
this.DropDownList1.DataTextField = "au_lname";
this.DropDownList1.DataValueField = "au_id";
this.DropDownList1.DataBind();
this.DropDownList1.Attributes.Add("onchange", "GetOrders(this.options[this.selectedIndex].value,'bbbbb');");
}
}
protected String callBack
{
get
{
return this.ClientScript.GetCallbackEventReference(this, "arg", "ClientCallback", "context");
}
}
public string RaiseCallbackEvent(string eventArgument)
{
DataSet ds = new DataSet();
SqlConnection cnn=new SqlConnection ("Data Source=JKDL-PORTAL;Initial Catalog=pubs;Persist Security Info=True;User ID=sa;Password=111" );
SqlDataAdapter da = new SqlDataAdapter("select titles.title_id,title from titles inner join titleauthor on titleauthor.title_id = titles.title_id where au_id = '" + eventArgument + "'", cnn);
cnn.Open ();
da.Fill(ds);
System.Text.StringBuilder str = new System.Text.StringBuilder();
foreach (DataRow dr in ds.Tables[0].Rows)
{
str.Append(dr["title"]);
str.Append("|");
}
return str.ToString ();
}
}
using System.Data;
using System.Configuration;
using System.Collections;
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;
using System.Data.SqlClient;
public partial class Default2 : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.DropDownList1.DataSource = this.SqlDataSource1;
this.DropDownList1.DataTextField = "au_lname";
this.DropDownList1.DataValueField = "au_id";
this.DropDownList1.DataBind();
this.DropDownList1.Attributes.Add("onchange", "GetOrders(this.options[this.selectedIndex].value,'bbbbb');");
}
}
protected String callBack
{
get
{
return this.ClientScript.GetCallbackEventReference(this, "arg", "ClientCallback", "context");
}
}
public string RaiseCallbackEvent(string eventArgument)
{
DataSet ds = new DataSet();
SqlConnection cnn=new SqlConnection ("Data Source=JKDL-PORTAL;Initial Catalog=pubs;Persist Security Info=True;User ID=sa;Password=111" );
SqlDataAdapter da = new SqlDataAdapter("select titles.title_id,title from titles inner join titleauthor on titleauthor.title_id = titles.title_id where au_id = '" + eventArgument + "'", cnn);
cnn.Open ();
da.Fill(ds);
System.Text.StringBuilder str = new System.Text.StringBuilder();
foreach (DataRow dr in ds.Tables[0].Rows)
{
str.Append(dr["title"]);
str.Append("|");
}
return str.ToString ();
}
}
呵..... 越来越好了....
参考
http://www.extremeexperts.com/Net/Articles/ClientCallbacksinASPNETWhidbey.aspx