多级选择问题的ASP实现(可以入精华吗?)
在开发网络应用程序时,常常会遇到多级选择的问题,即“子”一级选择的备选项信息依赖于“父”一级选择的数据。例如:在一个网页中包含两个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吉林”。
补充:asp教程,技巧与性能优化