前台页面肯定至少有两个DropDownList控件了,在基于.net框架下的ajax,还要加一个scriptmanager控件(必须使用)管理各个ajax控件和jscript文件。两外还有两个实现无刷新页面让dropdownlist联动起来的CascadingDropDown扩展服务器控件(其属性参考www.codeplex.com)。代码很简单,如下:
<body>
<form id="form1" runat="server">
<asp:scriptmanager id="sm" runat="server"></asp:scriptmanager>
请选择您company:
<asp:DropDownList ID="ddlUser"runat="server"></asp:DropDownList>
<asp:DropDownList ID="ddlCompany" runat="server">
</asp:DropDownList>
<ajaxToolkit:CascadingDropDown ID="ccdUser" TargetControlID="ddlUser"
Category="User" PromptText="请选择用户" LoadingText="用户加载中..." ServicePath="CompanyService.asmx" ServiceMethod="GetUser" runat="server" />
<ajaxToolkit:CascadingDropDown ID="ccdCompany" TargetControlID="ddlCompany" Category="Company" PromptText="请选择企业" LoadingText="企业加载中..." ServicePath="CompanyService.asmx" ServiceMethod="GetCompany" ParentControlID="ddlUser" runat="server" />
</form>
</body>
使用上述ajax服务器端控件请安装ASP.NET AJAX Control Toolkit和ASP.NET 2.0 AJAX Extensions程序集。
并在项目中引用Microsoft.Web.Preview.dll和AjaxControlToolkit.dll。如何使用asp.net ajax请阅读dflying的《ASP.NET AJAX程序设计》,其网址是:http://dflying.cnblogs.com/。
本示例来源于其教程的改进,他书上的源代码不是基于数据库的。
后台CompanyService.asmx代码如下:
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Configuration;
using AjaxControlToolkit;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Data;
using System.Data.SqlClient;
using Microsoft.ApplicationBlocks.Data;
[WebService(Namespace = "
http://tempuri.org/
")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.Web.Script.Services.ScriptService()]
public class CompanyService : System.Web.Services.WebService {
string strconn = ConfigurationSettings.AppSettings["connstring"];
SqlConnection conn;
[WebMethod]
public CascadingDropDownNameValue[] GetUser(string knownCategoryValues, string category) {
List<CascadingDropDownNameValue> userList = new List<CascadingDropDownNameValue>();
conn = new SqlConnection(strconn);
string SQLstring = "select userId,userRealName from userInfo";
SqlCommand cmd = new SqlCommand(SQLstring, conn);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
userList.Add(new CascadingDropDownNameValue(dr["userRealName"].ToString(),dr["userId"].ToString()));
}
dr.Close();
conn.Close();
return userList.ToArray();
}
[WebMethod]
public CascadingDropDownNameValue[] GetCompany(string knownCategoryValues, string category) {
StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
if (kv["User"].ToString() =="")
return null;
List<CascadingDropDownNameValue> companyList = new List<CascadingDropDownNameValue>();
conn = new SqlConnection(strconn);
string SQLstring = "select companyId,companyName from companyInfo where companyUserId=" + kv["user"].ToString();
SqlCommand cmd = new SqlCommand(SQLstring, conn);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
companyList.Add(new CascadingDropDownNameValue(dr["companyName"].ToString(),dr["companyId"].ToString()));
}
return companyList.ToArray();
}
}
整个代码基本上与asp.net代码风格一样,比较清晰。运行结果表明,实现了动态的联动而页面没刷新的效果。
另外,实现无刷新联动的方法是把要联动的dropdownlist放在一起做成一个自定义控件,一次性的把数据发送至客户端,然后使用javascript动态响应下拉事件显示数据。此种方法适用于发送至前台数据量较少的情况下,反应速度非常快。