说明:本文在http://blog.csdn.net/cuike519/archive/2004/08/22/81727.aspx文章的基础上做了一点修改。
在做一个文章添加功能时,想在选择大类后,自动将其所属二级小类显示出来,使用dropdownlist的selectedindexchanged事件可以很容易实现,但每次选择后页面总要刷新一次,让人感觉很不爽。为实现dropdownlist无刷新二级联动,这几天在网上找了些资料,但都无法达到我想要的效果,经过反复调试,现已基本实现了此功能,现将代码附下。
一、数据库设计:
| 字段名 | 数据类型 | 说明 |
| classid | 自动编号 | 类编号 |
| classname | varchar(8) | 类名 |
| upclassid | int(4) | 上级类编号 |
| classlevel | int(4) | 类级别,1为大类,2为小类 |
二、设计步骤:
1、首先,我们新建一个页面droptest.aspx,在其中放入两个dropdownlist控件:dropdownlist1和dropdownlist2,其完整代码如下:
<%@ page language="c#" codebehind="droptest.aspx.cs" autoeventwireup="false" inherits="studyweb.droptest" %>
<!doctype html public "-//w3c//dtd html 4.0 transitional//en" >
<html>
<head>
<title>webform2</title>
<meta content="microsoft visual studio .net 7.1" name="generator">
<meta content="c#" name="code_language">
<meta content="javascript" name="vs_defaultclientscript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetschema">
<script>
function load(classid){ //classid为接收传递的大类编号
var drp2 = document.getelementbyid("dropdownlist2");
function removeall(oelem) { //清除dropdownlist2的所有项
var i = 0;
for (i = oelem.length; i >= 0; i--){
oelem.options.remove(i);
}
}
removeall(drp2)
var ohttpreq = new activexobject("msxml2.xmlhttp");
var odoc = new activexobject("msxml2.domdocument");
ohttpreq.open("post", "dropchild.aspx?classid="+classid, false); //调用读取小类数据的页面,将大类
// 编号值传递过去
ohttpreq.send("");
result = ohttpreq.responsetext;
odoc.loadxml(result);
items1 = odoc.selectnodes("//classname/table/classname"); //读取所有请求大类所属小类的类名
items2 = odoc.selectnodes("//classname/table/classid"); //读取所有请求大类所属小类的编号
var itemslength=items1.length;
for(i=0;i<itemslength;i++) //将小类的类名和编号赋予dropdownlist2
{
var newoption = document.createelement("option");
newoption.text=items1[i].text;