您的位置:首页精文荟萃软件资讯 → 多级选择问题的ASP实现可以入精华吗?

多级选择问题的ASP实现可以入精华吗?

时间:2004/10/7 19:16:00来源:本站整理作者:蓝点我要评论(0)


            
             
              
             
            

               
               

            



            在开发网络应用程序时,常常会遇到多级选择的问题,即“子”一级选择的备选项信息依赖于“父”一级选择的数据。例如:在一个网页中包含两个select输入控件,一个用于列表备选的国家信息(“父”一级选择),另一个用于列表省份信息(“子”一级选择)。当用户在第一个select输入控件(“父”一级选择)中选中国家后,另一个select输入控件(“子”一级选择)的选项也要变为相应国家的省、州选项,而他们之间的关系动态地保存在数据库中。
提出问题
传统的解决方法可以描述为:用户选中“父”一级选择后,通过form提交的方式,由相应的处理程序从数据库中提取“子”一级选择的信息,并刷新客户端页面中“子”一级选择的数据。
采用这种方法的缺点是:
●必须编写一个或多个ASP程序分别处理用户的请求,程序代码质量不高;
●当级数超过两级时,必须解决“祖父”一级的选择信息的保存问题;
●每一次用户的修改或浏览多级信息,都必须重复提交以获得多级信息,这样,增加了服务器的负担,响应速度较慢。
针对以上方案中存在的问题,笔者在实践中找到了一种解决方法。该方法灵活应用HTML语言中的输入控制对象hidden,当hidden中的数据量小于2K时,可一次性将多级信息下载到客户端,并通过服务器端脚本与客户端脚本的共同作用,直接在客户端完成多级选择。
解决方法
HTML语言中的输入控制对象hidden可以通过name-value的方式存储字符串数据,而且该控制对象在客户端界面上不可见。
利用该输入控制,可以将数据库中多级选择信息按照一定的规则编码,分别存放在多个hidden对象中。当用户点击父级选项时,客户端程序按照一定的对应关系查找相应的hidden对象,并将hidden对象中的字符串信息解码,刷新子级选择对象。
其中,服务器端脚本需要完成的工作是将数据库中的多级信息按照顺序依次提取,并且将同级的信息数据按照一定规则编码形成字符串,存储在不同的hidden对象中;而客户端脚本需要完成的工作是将hidden对象中的字符串数据解码,并显示在子级选择对象中。
需要特别指出的是,数据的字符串编码是此种方法成功与否的一个关键因素,因此必须保证编码方法正确无误。
具体实现
下面以国家、省份两级选择为例,介绍在ASP中多级选择的具体实现方法。
在SQL Server 7.0数据库CountryDoc中存放两级信息的表分别为CountryName char(20)和ProvinceName char(20)。
考虑到国家名、省/州名为字符串数据,且不包含字符“0”,因此在选择编码方法时,采用5个连续的字符“0”作为不同数据项之间的分隔符。编码后的省份数据具体形式为“北京00000上海00000黑龙江00000吉林”。








国家 省份、州



//依次从动态数组中提取国家名称,并提取对应的省级数据信息
<% for i=0 to CountryNum-1 step 1 %>
<% temp1=CountryArr(i) %>
<% ProvinceNum=0 %>
<% sqlText=“select count(*) as RecordNum from CountryDoc where CountryName=‘“& temp1 & ”’” %><% set rs=conn.Execute(sqlText) %>
<% ProvinceNum=rs(“RecordNum”) %>
<% rs.Close %>
<% ProvinceStr=“” %>
<% sqlText =“select ProvinceName from CountryDoc where CountryName =‘“ & temp1 & ”’” %>
<% set rs=conn.Execute(sqlText) %>
<% do while not rs.EOF %>
//将省级信息字符串编码(以“00000”分隔)
<%ProvinceStr=ProvinceStr & Trim(rs
(“ProvinceName”)) & “00000” %>
<% rs.MoveNext %>
<% loop %>
<% rs.Close %>
//将编码后的省级数据写入hidden对象中
<% Response.Write(“”) %>
//保存数据项个数
<% Response.Write(“”) %>
<% next %>
<% set rs=nothing %>
<% conn.close %>
<% set conn=nothing %>

以上代码在NT 4.0+IIS 4.0+SQL Server 7.0+IE 5.0环境中运行通过。
由于整个工作都在一个ASP程序中完成,并且所有数据一次性下载到客户端,用户选择时不存在“祖父”一级的选择信息的保存问题(没有刷新的工作)。
小 结
如果数据量不大的话,采用本文介绍的方法是可行的。但是当一个hidden中存储的数据量超过2K时,受到HTML语言的自身限制,可能会存在hidden对象中数据丢失或缺少的问题,此时建议仍采用表单提取的方法来完成多级选择。

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3

最新文章 微信3.6.0测试版更新了微信支付漏洞会造成哪 360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗

人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本