从一位老兄的Blog上看到了这个,可是代码却不太全(至少我这里看不全)。于是想办法补充了一点:
1、客户端脚本:
1
function CallServer()
2
{
3
var product = "测试";
4
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
5
}
6
7
function ReceiveServerData(rValue)
8
{
9
alert(rValue);
10
window.location.reload();
11
var tt=document.getElementById("TextBox1");
12
alert(tt.DataSource);
13
}
14
15
function selectChange(e)
16
{
17
for(var i=0;i<e.options.length;i++)
18
{
19
if(e.options[i].selected==true)
20
{
21
selectSon(e.options[i].value); break;
22
}
23
}
24
}
25
26
function selectSon(e)
27
{
28
<%= ClientScript.GetCallbackEventReference(this, "e", "ReceiveServerData",null)%>;
29
}
30
31
function ReceiveServerData(rValue)
32
{
33
var son=form1.elements["SelSon"];
34
var s=rValue.split("|");
35
son.length=s.length;
36
for(var i=0;i<s.length-1;i++)
37
{
38
son.options[i+1]=new Option(s[i],s[i]);
39
}
40
}
41
/////////////////////
42
function selectChangeSon(e)
43
{
44
for(var i=0;i<e.options.length;i++)
45
{
46
if(e.options[i].selected==true)
47
{
48
select(e.options[i].value); break;
49
}
50
}
51
}
52
53
function select(e)
54
{
55
<%= ClientScript.GetCallbackEventReference(this, "e", "hello",null)%>;
56
}
57
58
function hello(rValue)
59
{
60
var child=form1.elements["Sel"];
61
var s=rValue.split("|");
62
child.length=s.length;
63
for(var i=0;i<s.length-1;i++)
64
{
65
child.options[i+1]=new Option(s[i],s[i]);
66
}
67
}
68
</script>
2、aspx页面代码
function CallServer()2
{3
var product = "测试";4
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;5
}6
7
function ReceiveServerData(rValue)8
{9
alert(rValue);10
window.location.reload();11
var tt=document.getElementById("TextBox1");12
alert(tt.DataSource);13
}14
15
function selectChange(e)16
{17
for(var i=0;i<e.options.length;i++)18
{19
if(e.options[i].selected==true)20
{21
selectSon(e.options[i].value); break;22
}23
}24
}25
26
function selectSon(e) 27
{28
<%= ClientScript.GetCallbackEventReference(this, "e", "ReceiveServerData",null)%>;29
}30
31
function ReceiveServerData(rValue)32
{33
var son=form1.elements["SelSon"];34
var s=rValue.split("|");35
son.length=s.length;36
for(var i=0;i<s.length-1;i++)37
{38
son.options[i+1]=new Option(s[i],s[i]);39
}40
}41
/////////////////////42
function selectChangeSon(e)43
{44
for(var i=0;i<e.options.length;i++)45
{46
if(e.options[i].selected==true)47
{48
select(e.options[i].value); break;49
}50
}51
}52
53
function select(e)54
{55
<%= ClientScript.GetCallbackEventReference(this, "e", "hello",null)%>;56
}57
58
function hello(rValue)59
{60
var child=form1.elements["Sel"];61
var s=rValue.split("|");62
child.length=s.length;63
for(var i=0;i<s.length-1;i++)64
{65
child.options[i+1]=new Option(s[i],s[i]);66
}67
}68
</script> 1 <select id="SelParent" runat="server" onchange="selectChange(this)">
2 <option selected="selected" value="0">请选择 </option>
3 </select>
4 <br />
5 <select id="SelSon" runat="server" onchange="selectChangeSon(this)">
6 <option selected="selected" value="0">请选择 </option>
7 </select>
8 <br />
9 <select id="Sel">
10 <option selected="selected" value="0">请选择</option>
11 </select>
3、服务器端代码2 <option selected="selected" value="0">请选择 </option>
3 </select>
4 <br />
5 <select id="SelSon" runat="server" onchange="selectChangeSon(this)">
6 <option selected="selected" value="0">请选择 </option>
7 </select>
8 <br />
9 <select id="Sel">
10 <option selected="selected" value="0">请选择</option>
11 </select>
1
OracleConnection conn = new OracleConnection("Data Source=?;UID=?;PWD=?");
2
3
4
protected void Page_Load(object sender, EventArgs e)
5
6
{
7
8
ParentBind();
9
10
}
11
12
13
private string resualt;
14
15
16
private void ParentBind()
17
18
{
19
20
string str = "select distinct(CID) from multimenu order by cid";
21
22
DataSet ds = ExecuteSql4Ds(str);
23
24
SelParent.DataSource = ds;
25
26
SelParent.DataTextField = "cid";
27
28
SelParent.DataBind();
29
30
}
31
32
private string SonBind(string e)//绑定第二级
33
34
{
35
36
string str = "select distinct(CCID) from multimenu where CID=" + e;
37
38
DataSet ds = ExecuteSql4Ds(str);
39
40
string s = "";
41
42
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
43
44
s += ds.Tables[0].Rows[i][0] + "|";
45
46
return s;
47
48
}
49
50
51
52
private string ChildBind(string e)//绑定第三级
53
54
{
55
56
string str = "select distinct(CCCID) from multimenu where CCID=" + e;
57
58
DataSet ds = ExecuteSql4Ds(str);
59
60
string s = "";
61
62
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
63
64
s += ds.Tables[0].Rows[i][0] + "|";
65
66
return s;
67
68
}
69
70
71
72
private DataSet ExecuteSql4Ds(string str)
73
74
{
75
76
OracleCommand cmd = new OracleCommand(str, conn);
77
78
OracleDataAdapter da = new OracleDataAdapter(cmd);
79
80
DataSet ds = new DataSet();
81
82
da.Fill(ds);
83
84
85
86
return ds;
87
88
}
89
90
void ICallbackEventHandler.RaiseCallbackEvent(String eventArgument)
91
92
{
93
94
if (eventArgument.Length == 1)//绑定第二级,我的数据库里分别是用1,11,111来代表三级,所以长度为一的就是一级,大家可以根据自己的需要把修改
95
96
{
97
98
string eventArgument1 = SonBind(eventArgument);
99
100
resualt = eventArgument1;
101
102
}
103
104
else
105
106
{
107
108
string eventArgument2 = ChildBind(eventArgument);
109
110
resualt = eventArgument2;
111
112
}
113
114
}
115
116
string ICallbackEventHandler.GetCallbackResult()
117
118
{
119
120
return resualt;
121
122
}
OracleConnection conn = new OracleConnection("Data Source=?;UID=?;PWD=?");2

3

4
protected void Page_Load(object sender, EventArgs e)5

6
{7

8
ParentBind();9

10
}11

12

13
private string resualt;14

15

16
private void ParentBind()17

18
{19

20
string str = "select distinct(CID) from multimenu order by cid";21

22
DataSet ds = ExecuteSql4Ds(str);23

24
SelParent.DataSource = ds;25

26
SelParent.DataTextField = "cid";27

28
SelParent.DataBind();29

30
}31

32
private string SonBind(string e)//绑定第二级33

34
{35

36
string str = "select distinct(CCID) from multimenu where CID=" + e;37

38
DataSet ds = ExecuteSql4Ds(str);39

40
string s = "";41

42
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)43

44
s += ds.Tables[0].Rows[i][0] + "|";45

46
return s;47

48
}49

50
51

52
private string ChildBind(string e)//绑定第三级53

54
{55

56
string str = "select distinct(CCCID) from multimenu where CCID=" + e;57

58
DataSet ds = ExecuteSql4Ds(str);59

60
string s = "";61

62
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)63

64
s += ds.Tables[0].Rows[i][0] + "|";65

66
return s;67

68
}69

70
71

72
private DataSet ExecuteSql4Ds(string str)73

74
{75

76
OracleCommand cmd = new OracleCommand(str, conn);77

78
OracleDataAdapter da = new OracleDataAdapter(cmd);79

80
DataSet ds = new DataSet();81

82
da.Fill(ds);83

84
85

86
return ds;87

88
}89

90
void ICallbackEventHandler.RaiseCallbackEvent(String eventArgument)91

92
{93

94
if (eventArgument.Length == 1)//绑定第二级,我的数据库里分别是用1,11,111来代表三级,所以长度为一的就是一级,大家可以根据自己的需要把修改95

96
{97

98
string eventArgument1 = SonBind(eventArgument);99

100
resualt = eventArgument1;101

102
}103

104
else105

106
{107

108
string eventArgument2 = ChildBind(eventArgument);109

110
resualt = eventArgument2;111

112
}113

114
}115

116
string ICallbackEventHandler.GetCallbackResult()117

118
{119

120
return resualt;121

122
}4、数据库脚本
1 create table MULTIMENU
2 (
3 ID NUMBER(2) not null,
4 CID NUMBER(2) not null,
5 DSCT VARCHAR2(30) not null,
6 CCID NUMBER(2),
7 CCCID NUMBER(3)
8 )
9
10
2 (
3 ID NUMBER(2) not null,
4 CID NUMBER(2) not null,
5 DSCT VARCHAR2(30) not null,
6 CCID NUMBER(2),
7 CCCID NUMBER(3)
8 )
9
10

浙公网安备 33010602011771号