在没有接触Ajax之前,总觉得它是那么遥不可及.大家都知道,Ajax它不是一项技术.它是多种技术的结合.光是JS已让人很头痛了,再加上XML,XHTML,XMLHttpRequest,CSS,DOM等,更是让人晕头转向.呵...晕归晕,可是工作上需要,你不得不学.于是上两个星期决定下来,这两个星期一定要把Ajax搞个明白.经过偶两个星期的夜车,终于让自己有了点眉目.下面则是偶做的一个三级联动...
前台代码:
1
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="selectStudent.aspx.cs" Inherits="selectStudent" %>
2
3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
5
<html xmlns="http://www.w3.org/1999/xhtml" >
6
<head runat="server">
7
<title>无标题页</title>
8
</head>
9
<script language="javascript" type="text/javascript">
10
function loadclass()
11
{
12
var ddlclass=document.getElementById("ddlClass"); //定义一个ddlClass,用于当选定ddlGrade时加载数据
13
ddlclass.innerText="";
14
15
for(var i=0;i<ddlclass.length;i++) //当它第一次加载时已有数据
所以得清空它
.
16
{
17
ddlclass.remove(i);
18
}
19
20
var xmlhttp; //创建一个XMLHttpRequest对象
21
try{
22
xmlhttp=new ActiveXObject('Msxml2.XMLHTTP');
23
}catch(e){
24
try{
25
xml=new ActiveXObject('Microsoft.XMLHTTP');
26
}catch(e){
27
try{
28
xml=new XMLHttpRequest();
29
}catch(e){}
30
}
31
}
32
33
var gradenumber=document.getElementById("ddlGrade").value;
34
35
36
xmlhttp.onreadystatechange=function() //当异步请求成功,所要处理的事情
.
37
{
38
if(xmlhttp.readyState==4)
39
{
40
if(xmlhttp.status==200)
41
{
42
var classitem = xmlhttp.responseText; //获取服务器返回的值
43
//alert(xmlhttp.responseText);
44
45
if(classitem !="")
46
{
47
var allArry=classitem.split(","); //把所返回的值作为字符串拆分
48
49
for(var i=1;i<allArry.length;i++)
50
{
51
var thisArry=allArry[i].split("|");
52
document.getElementById("ddlClass").options.add(new Option(thisArry[1].toString(),thisArry[0].toString())); //再把字符串添加到ddlClass中
53
}
54
}
55
56
var classnumber=document.getElementById("ddlClass").value;
57
loadstudent();
58
59
}
60
else
61
{
62
alert("网络失败");
63
}
64
}
65
}
66
67
xmlhttp.open("GET","selectStudent.aspx?gradenumber="+gradenumber,false); //创建一个请求
.
68
xmlhttp.send(null);
69
70
}
71
72
function loadstudent()
73
{
74
var ddlstudent=document.getElementById("ddlStudent");
75
ddlstudent.innerText="";
76
77
var classnumber=document.getElementById("ddlClass").value;
78
79
for(var i=0;i<ddlstudent.length;i++)
80
{
81
ddlstudent.remove(i);
82
}
83
84
var xmlhttp2;
85
try{
86
xmlhttp2=new ActiveXObject('Msxml2.XMLHTTP');
87
}catch(e){
88
try{
89
xmlhttp2=new ActiveXObject('Microsoft.XMLHTTP');
90
}catch(e){
91
try{
92
xmlhttp2=new XMLHttpRequest();
93
}catch(e){}
94
}
95
}
96
97
xmlhttp2.onreadystatechange=function()
98
{
99
if(xmlhttp2.readyState==4)
100
{
101
if(xmlhttp2.status==200)
102
{
103
var studentitem=xmlhttp2.responseText;
104
alert(xmlhttp2.responseText);
105
if(studentitem !="")
106
{
107
var allArry=studentitem.split(",");
108
109
for(var i=1;i<allArry.length;i++)
110
{
111
var thisArry=allArry[i].split("|");
112
document.getElementById("ddlStudent").options.add(new Option(thisArry[1].toString(),thisArry[0].toString()));
113
}
114
}
115
}
116
else
117
{
118
alert("网络失败");
119
}
120
}
121
}
122
123
xmlhttp2.open("GET","selectStudent.aspx?classnumber="+classnumber,false);
124
xmlhttp2.send(null);
125
}
126
</script>
127
<body>
128
<form id="form1" runat="server">
129
<div>
130
<asp:Label ID="Label1" runat="server" Text="年级"></asp:Label>
131
<asp:DropDownList ID="ddlGrade" runat="server">
132
</asp:DropDownList>
133
<asp:Label ID="Label2" runat="server" Text="班级"></asp:Label>
134
<asp:DropDownList ID="ddlClass" runat="server">
135
</asp:DropDownList>
136
<asp:Label ID="Label3" runat="server" Text="姓名"></asp:Label>
137
<asp:DropDownList ID="ddlStudent" runat="server">
138
</asp:DropDownList></div>
139
</form>
140
</body>
141
</html>
142

2

3

4

5

6

7

8

9

10

11

12

13

14

15



16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36


37

38

39

40

41

42


43

44

45

46

47


48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67


68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

后台代码:
1
using System;
2
using System.Data;
3
using System.Configuration;
4
using System.Collections;
5
using System.Web;
6
using System.Web.Security;
7
using System.Web.UI;
8
using System.Web.UI.WebControls;
9
using System.Web.UI.WebControls.WebParts;
10
using System.Web.UI.HtmlControls;
11
using System.Data.OracleClient;
12
13
public partial class selectStudent : System.Web.UI.Page
14
{
15
protected void Page_Load(object sender, EventArgs e)
16
{
17
if (!IsPostBack)
18
{
19
if (Request["gradenumber"] != null)
20
{
21
getgradenumber() ;
22
}
23
if (Request["classnumber"] != null)
24
{
25
getclassnumber();
26
}
27
else
28
{
29
loaddata();
30
}
31
}
32
}
33
34
private void loaddata()
35
{
36
dataBindGrade();
37
dataBindClass(Convert.ToInt32(this.ddlGrade.SelectedValue.ToString()));
38
dataBindStudent(Convert.ToInt32(this.ddlClass.SelectedValue.ToString()));
39
40
this.ddlGrade.Attributes["onchange"] = "loadclass()";
41
this.ddlClass.Attributes["onchange"] = "loadstudent()";
42
}
43
44
private void getgradenumber()
45
{
46
int gradenumber = Convert.ToInt32(Request["gradenumber"].ToString());
47
string str = "select *from SchoolClass where GradeNumber=" + gradenumber;
48
OracleConnection con=retuncon();
49
con.Open();
50
OracleDataAdapter oda = new OracleDataAdapter(str, con);
51
DataSet ds = new DataSet();
52
oda.Fill(ds);
53
DataTable dt = ds.Tables[0];
54
string returnstr = "";
55
56
foreach(DataRow dr in dt.Rows)
57
{
58
returnstr += "," + dr["ClassNumber"].ToString() + "|" + dr["ClassName"].ToString();
59
}
60
61
con.Close();
62
Response.Write(returnstr);
63
Response.Flush();
64
Response.End();
65
}
66
67
private void getclassnumber()
68
{
69
int classnumber = Convert.ToInt32(Request["classnumber"].ToString());
70
string str = "select *from SchoolStudent where classnumber=" + classnumber;
71
OracleConnection con = retuncon();
72
con.Open();
73
OracleDataAdapter oda = new OracleDataAdapter(str, con);
74
DataSet ds = new DataSet();
75
oda.Fill(ds);
76
77
DataTable dt = ds.Tables[0];
78
string returnstr = "";
79
80
foreach (DataRow dr in dt.Rows)
81
{
82
returnstr += "," + dr["StudentNumber"].ToString() + "|" + dr["StudentName"].ToString();
83
}
84
85
con.Close();
86
Response.Write(returnstr);
87
Response.Flush();
88
Response.End();
89
90
91
}
92
93
private void dataBindGrade()
94
{
95
OracleConnection con = retuncon();
96
con.Open();
97
OracleDataAdapter oda = new OracleDataAdapter("select *from SchoolGrade", con);
98
DataSet ds = new DataSet();
99
oda.Fill(ds);
100
this.ddlGrade.DataSource = ds;
101
this.ddlGrade.DataValueField = "GradeNumber";
102
this.ddlGrade.DataTextField = "GradeName";
103
this.ddlGrade.DataBind();
104
con.Close();
105
}
106
107
private void dataBindClass(int gradenumber)
108
{
109
OracleConnection con = retuncon();
110
con.Open();
111
OracleDataAdapter oda = new OracleDataAdapter("select *from SchoolClass where GradeNumber="+gradenumber, con);
112
DataSet ds = new DataSet();
113
oda.Fill(ds);
114
this.ddlClass.DataSource = ds;
115
this.ddlClass.DataValueField = "ClassNumber";
116
this.ddlClass.DataTextField = "ClassName";
117
this.ddlClass.DataBind();
118
con.Close();
119
}
120
121
private void dataBindStudent(int classnumber)
122
{
123
OracleConnection con = retuncon();
124
con.Open();
125
OracleDataAdapter oda = new OracleDataAdapter("select *from SchoolStudent where ClassNumber=" +classnumber, con);
126
DataSet ds = new DataSet();
127
oda.Fill(ds);
128
this.ddlStudent.DataSource = ds;
129
this.ddlStudent.DataValueField = "StudentNumber";
130
this.ddlStudent.DataTextField = "StudentName";
131
this.ddlStudent.DataBind();
132
con.Close();
133
}
134
135
136
public OracleConnection retuncon()
137
{
138
OracleConnection con = new OracleConnection("data source=wtszcc;User Id=wangtanps;Password=wtszcc");
139
return con;
140
}
141
}
142

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!