给个最简单的
demo.htm:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<script id="clientEventHandlersJS" language="javascript">
<!--
function Button1_onclick() {
var _xmldom = new ActiveXObject("MSXML");
var sURl = "demo.asp"
_xmldom.URL = sURl;
var _backdata = _xmldom.root;
var ele =_backdata.children.item("ele").text;
_xmldom= null;
document.all.Text1.value = ele;
}
//-->
</script>
</head>
<body MS_POSITIONING="GridLayout">
<INPUT id="Text1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" type="text" name="Text1">
<INPUT id="Button1" style="Z-INDEX: 102; LEFT: 16px; POSITION: absolute; TOP: 56px" type="button" value="Button" name="Button1" language="javascript" οnclick="return Button1_onclick()">
</body>
</html>
demo.asp
<%
Response.Write("<?xml version='1.0' encoding='gb2312' ?><theroot><ele>111</ele></theroot>")
%>
<script type="text/javascript"> document.write(""); </script> <script type="text/javascript">document.write("");</script> <script language="JavaScript" src="http://www.csdn.net/common/common.asp?cid=5" type="text/javascript"></script>
CSDN首页 | 新闻 | 论坛 | 小组 | Blog | 文档 | 下载 | 读书 | Tag | 网摘 | 搜索 | .NET | Java | 游戏 | 视频 | 人才 | 外包 | 第二书店 | 程序员 |
关于DropDownList的无刷新二级联动问题
[dd.aspx.vb]
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
Call init_porvince_DropDownlist()
End If
End Sub
Private Sub init_per_DropDownList()
Dim SQLConn As SqlConnection
Dim SQLConnstr As String
SQLConnstr = ConfigurationSettings.AppSettings("SQLConnstr")
SQLConn = New SqlConnection(SQLConnstr)
SQLConn.Open()
Dim cmd As New SqlCommand
cmd.Connection = SQLConn
Dim SQLstr As String = "select id,title from suminfo_Profession_bigclass"
cmd.CommandText = SQLstr
Dim sql_adpt As SqlDataAdapter = New SqlDataAdapter(cmd)
Dim per_big_ds As DataTable = New DataTable
sql_adpt.Fill(per_big_ds)
perb_DropDownList.DataSource = per_big_ds
perb_DropDownList.DataTextField = "title"
perb_DropDownList.DataValueField = "id"
perb_DropDownList.DataBind()
Dim big_legth As Integer = per_big_ds.Rows.Count()
Dim sbscript As New System.Text.StringBuilder
sbscript.Append("<script><!--")
sbscript.Append(Environment.NewLine & "var group=new Array(" & big_legth & ");for(i=0;i<" & big_legth & ";i++){group[i]=new Array()}" & Environment.NewLine)
Dim i As Integer
Dim j As Integer
Dim tempclass As DataTable
Dim classlegth As Integer
For i = 0 To big_legth - 1
SQLstr = "select id,title from suminfo_Profession_smallclass where bigclass_id=" & CInt(per_big_ds.Rows(i)(0))
cmd.CommandText = SQLstr
sql_adpt = New SqlDataAdapter(cmd)
tempclass = New DataTable
sql_adpt.Fill(tempclass)
classlegth = tempclass.Rows.Count()
For j = 0 To classlegth - 1
sbscript.Append("group[" & i & "][" & j & "]=new Option(""" & tempclass.Rows(j)(1) & """,""" & tempclass.Rows(j)(0) & """);" & Environment.NewLine)
Next
Next
sbscript.Append(Environment.NewLine & "function redirect(x){" & Environment.NewLine & "for(m=Form1.pers_DropDownList.options.length-1;m>0;m--){Form1.pers_DropDownList.options[m]=null}")
sbscript.Append(Environment.NewLine & "for (i=0;i<group[x].length;i++){" & Environment.NewLine & "Form1.pers_DropDownList.options[i]=new Option(group[x][i].text,group[x][i].value)}")
sbscript.Append(Environment.NewLine & "Form1.pers_DropDownList.options[0].selected=true;Form1.classid.value=Form1.pers_DropDownList.options[0].value;}")
sbscript.Append(Environment.NewLine & "function choose(x){Form1.classid.value=Form1.pers_DropDownList.options[x].value;}")
sbscript.Append(Environment.NewLine & "--></script>")
Dim strscript As String = sbscript.ToString()
If (Not IsClientScriptBlockRegistered("clientScript")) Then
RegisterClientScriptBlock("clientScript", strscript)
End If
SQLstr = "SELECT id,title FROM suminfo_Profession_smallclass WHERE id=" & CInt(per_big_ds.Rows(0)(0))
cmd.CommandText = SQLstr
sql_adpt = New SqlDataAdapter(cmd)
Dim per_small_ds As DataTable = New DataTable
sql_adpt.Fill(per_small_ds)
pers_DropDownList.DataSource = per_small_ds
pers_DropDownList.DataValueField = "id"
pers_DropDownList.DataTextField = "title"
If Not IsPostBack Then pers_DropDownList.DataBind()
sql_adpt.Dispose()
cmd.Dispose()
cmd = Nothing
sql_adpt.Dispose()
sql_adpt = Nothing
per_big_ds.Dispose()
per_big_ds = Nothing
SQLConn.Close()
End Sub
[dd.aspx]
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="professions.aspx.vb" Inherits="sumdata_datacenter.professions"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>professions</title>
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
<style>TD { FONT-SIZE: 9pt }
</style>
<script language="javascript">
function XmlPost3(obj,fullname,sType)
{
var svalue=obj.value;
var mytopname="";
if(sType == "1")
{
mytopname="请选择名称";
}
else
{
mytopname="请选择子类名称";
}
var fullObj=document.all(fullname);
var webFileUrl = "?sortid=" + svalue + "&sType=" + sType;
var result = "";
var xmlHttp = new ActiveXobject("MSXML2.XMLHTTP");
xmlHttp.open("POST" ,webFileUrl, false);
xmlHttp.send("");
result = xmlHttp.responseText;
if(result != "" && svalue != "")
{
fullObj.length=0;
fullObj.options.add(new Option(mytopname,""));
var piArray = result.split(",");
for(var i=0;i<piArray.length;i++)
{
var ary1 = piArray[i].toString().split("|");
fullObj.options.add(new Option(ary1[1].toString(),ary1[0],toString()));
}
}
else
{
fullObj.length = 0;
fullObj.options.add(new Option(mytopname,""));
}
if(sType == "1")
{
document.all("bc_DropDownList").length = 0;
document.all("sc_DropDownList").options.add(new Option(mytopname,""));
}
}
</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<FONT face="宋体">
<INPUT id="classid" type="text" runat="server" NAME="classid" style="display:none;">
<table cellpadding="0" cellspacing="0" width="96%" align="center" border="0">
<tr>
<td style="HEIGHT: 17px">
行业分类:<asp:DropDownList id="bc_DropDownList" runat="server" οnchange="redirect(this.options.selectedIndex)"></asp:DropDownList>
行业子类:<asp:DropDownList id="sc_DropDownList" runat="server" οnchange="choose(this.options.selectedIndex)"></asp:DropDownList>
<asp:Button id="del_bc" runat="server" Text="删除分类" Width="73"></asp:Button>
<asp:Button id="del_sc" runat="server" Text="删除子类" Width="73"></asp:Button>
</td>
</tr>
<tr>
<td height="16" style="HEIGHT: 16px"></td>
</tr>
<tr>
<td>
添加分类:<asp:TextBox id="bc_add_textbox" runat="server"></asp:TextBox>
<asp:Button id="bc_submit" runat="server" Text="添加分类" Width="73"></asp:Button>
</td>
</tr>
<tr>
<td>
添加子类:<asp:DropDownList id="bc_add_DropDownList" runat="server"></asp:DropDownList>
<asp:TextBox id="sc_add_textbox" runat="server"></asp:TextBox>
<asp:Button id="Button4" runat="server" Text="添加子类" Width="73"></asp:Button>
</td>
</tr>
</table>
</FONT>
</form>
</body>
</HTML>
以上代码是从网上找来的,开始的时候运行正常,可是把 id为1 的记录删除后总用sc_DropDownList.SelectedValue总是提不出第二个dropdownlist的值,请各位大侠指点一下,谢谢~~~~~ 问题点数:50、回复次数:14Top
1 楼starboy1413(小辉)回复于 2005-11-22 08:59:12 得分 0
自己先顶一下,等待ing.....................Top
2 楼niedewang(程序爱好)回复于 2005-11-22 09:01:39 得分 0
用java script 结合 .net 吧,我实现过一些小数据的联动,方法比较麻烦,顶一下,看大家有没有好的方法Top
3 楼net_lover(【孟子E章】)回复于 2005-11-22 09:03:22 得分 10
应该是你的sql语句的问题。看看每次的sql语句是否都返回了数据Top
4 楼singlepine(小山)回复于 2005-11-22 09:07:34 得分 10
http://singlepine.cnblogs.com/articles/265678.htmlTop
5 楼jiffer(爱工作,更爱老婆)回复于 2005-11-22 09:08:14 得分 0
用js+webservice吧,多爽的。Top
6 楼fphuang(人在哈尔滨--每天只能接分20分钟)回复于 2005-11-22 09:11:21 得分 10
开始的时候运行正常,可是把 id为1 的记录删除后总用sc_DropDownList.SelectedValue总是提不出第二个dropdownlist的值
--把 id为1 的记录删除后,
这个时候改变第一个dropdownlist的时候,sc_DropDownList这个跟着改变吗?
Top
7 楼starboy1413(小辉)回复于 2005-11-22 09:13:40 得分 0
fphuang(人在哈尔滨@net) :初始化的时候sc_dropdownlist里没有值,选择bc_dropdownlist后sc_dropdownlist里有值,但是用sc_dropdownlist.selectedvalue取不出来~~~~Top
8 楼fphuang(人在哈尔滨--每天只能接分20分钟)回复于 2005-11-22 09:31:10 得分 0
嗯,其实sc_dropdownlist的值是不能sc_dropdownlist.selectedvalue这样取得的,
我认为与你“可是把 id为1 的记录删除”这个过程是没有关系的;
你可以在页面上放个TextBox控件(加入控件的id为tb),使其背景色(包括前景色)与你的叶面一样(这样做的目的就是使浏览这个叶面的时候看不到他),然后在page_load的过程中加入
sc_dropdownlist.Attributes.Add("onChange","javascript:document.Form1.tb.value=this.options[this.selectedIndex].value;");
这样就在sc_dropdownlist发生变化的时候,将sc_dropdownlist.selectedvalue值就放入了tb.text中了,所以你就可以取tb.text这个值了。Top
9 楼jamily968(飞鹰)回复于 2005-11-22 09:35:12 得分 10
<INPUT id="txtMessage">
<INPUT οnclick="callToServer();" type="button" value="Call to Server">
Result : <INPUT id="txtResult" >
当点击按钮的时候,将调用JS脚本方法callToServer(),JS脚本如下:
function callToServer()
{
var param = document.getElementById("txtUsername").value;
var context = "";
<% = ClientScript %>
}
function handleResultFromServer(result, context)
{
document.getElementById("txtResult").value = result;
}
handleResultFromServer()方法则负责将从服务器传回的数据写到txtResult这个文本框里面。
再看看服务器端的代码:
public partial class Default_aspx : System.Web.UI.ICallbackEventHandler
{
private String ClientScript
{
get
{
return this.GetCallbackEventReference(this, "param", "handleResultFromServer", "context");
}
}
public string RaiseCallbackEvent(string eventArgument)
{
return "客户端在[" + DateTime.Now.ToString() + "]传送来 [" + eventArgument + "].";
}
}
我们让页面直接实现ICallbackEventHandler接口,然后接口定义的RaiseCallbackEvent()方法中将服务器的时间和传来的数据一起返回回去。
ClientScript属性的作用是,它调用了页面的GetCallbackEventReference()方法,获得了让客户端有能力调用服务器端方法的JS脚本,并输出到页面的callToServer()方法中,这样,点击页面按钮时,就开始执行页面上包含了调用服务器方法的的callToServer()方法。
注意GetCallbackEventReference()方法的参数,在参数中,我们定义了客户端的哪个变量包含了要传递给服务器,服务器方法执行后,调用客户端的哪个方法等信息。GetCallbackEventReference()的详细参看请看这里。
最后,我们这个页面的执行效果就是:
此主题相关图片如下:
Top
10 楼sunnystar365(一个人的天空)回复于 2005-11-22 10:08:12 得分 10
既然是联动,所以当你删除ID为1的记录,那另一个DROPDOWNLIST中的有关与ID编号的记录也要
删除,而且删除后也应该重新绑定才可以了。
楼主的代码是VB语言写的,这个是C#语言的,可以参考一下
http://blog.csdn.net/sunnystar365/archive/2005/09/28/491349.aspxTop
11 楼starboy1413(小辉)回复于 2005-11-22 10:15:37 得分 0
先谢各位朋友了,sc_dropdownlist的值取出来了,但是不对 ,当bc_dropdownlist为第一项时值正常,当bc_dropdownlist为非第一项时取出来的值为sc_dropdownlist的第一个值,新的问题又来也~~~~~~~~~~~~~~~~~~~~Top
12 楼lsp69(浪子神剑)回复于 2005-11-22 10:26:43 得分 0
顶一下Top
13 楼starboy1413(小辉)回复于 2005-11-22 11:18:44 得分 0
谢谢各位高手,我用"一个人的天空"的方法解决了这个问题,但是总感觉我这个二级联动的源程序还是有问题,先结贴,这次分不多,回过贴的朋友有需要的话我再开贴给分,呵~~~~~~Top
14 楼lengfeng8866(公孙恋雪(专心学习WEB开发))回复于 2005-12-12 18:24:56 得分 0
好东西大家都喜欢,一直想实现无刷新页面。。。Top