多級選擇問題的ASP完成
發(fā)表時間:2024-02-03 來源:明輝站整理相關軟件相關文章人氣:
[摘要]在開發(fā)網(wǎng)絡應用程序時,常常會遇到多級選擇的問題,即“子”一級選擇的備選項信息依賴于“父”一級選擇的數(shù)據(jù)。例如:在一個網(wǎng)頁中包含兩個select輸入控件,一個用于列表備選的國家信息(“父”一級選擇),另一個用于列表省份信息(“子”一級選擇)。當用戶在第一個select輸入控件(“父”一級選擇)中選中...
在開發(fā)網(wǎng)絡應用程序時,常常會遇到多級選擇的問題,即“子”一級選擇的備選項信息依賴于“父”一級選擇的數(shù)據(jù)。例如:在一個網(wǎng)頁中包含兩個select輸入控件,一個用于列表備選的國家信息(“父”一級選擇),另一個用于列表省份信息(“子”一級選擇)。當用戶在第一個select輸入控件(“父”一級選擇)中選中國家后,另一個select輸入控件(“子”一級選擇)的選項也要變?yōu)橄鄳獓业氖、州選項,而他們之間的關系動態(tài)地保存在數(shù)據(jù)庫中。
提出問題
傳統(tǒng)的解決方法可以描述為:用戶選中“父”一級選擇后,通過form提交的方式,由相應的處理程序從數(shù)據(jù)庫中提取“子”一級選擇的信息,并刷新客戶端頁面中“子”一級選擇的數(shù)據(jù)。
采用這種方法的缺點是:
●必須編寫一個或多個ASP程序分別處理用戶的請求,程序代碼質(zhì)量不高;
●當級數(shù)超過兩級時,必須解決“祖父”一級的選擇信息的保存問題;
●每一次用戶的修改或瀏覽多級信息,都必須重復提交以獲得多級信息,這樣,增加了服務器的負擔,響應速度較慢。
針對以上方案中存在的問題,筆者在實踐中找到了一種解決方法。該方法靈活應用HTML語言中的輸入控制對象hidden,當hidden中的數(shù)據(jù)量小于2K時,可一次性將多級信息下載到客戶端,并通過服務器端腳本與客戶端腳本的共同作用,直接在客戶端完成多級選擇。
解決方法
HTML語言中的輸入控制對象hidden可以通過name-value的方式存儲字符串數(shù)據(jù),而且該控制對象在客戶端界面上不可見。
利用該輸入控制,可以將數(shù)據(jù)庫中多級選擇信息按照一定的規(guī)則編碼,分別存放在多個hidden對象中。當用戶點擊父級選項時,客戶端程序按照一定的對應關系查找相應的hidden對象,并將hidden對象中的字符串信息解碼,刷新子級選擇對象。
其中,服務器端腳本需要完成的工作是將數(shù)據(jù)庫中的多級信息按照順序依次提取,并且將同級的信息數(shù)據(jù)按照一定規(guī)則編碼形成字符串,存儲在不同的hidden對象中;而客戶端腳本需要完成的工作是將hidden對象中的字符串數(shù)據(jù)解碼,并顯示在子級選擇對象中。
需要特別指出的是,數(shù)據(jù)的字符串編碼是此種方法成功與否的一個關鍵因素,因此必須保證編碼方法正確無誤。
具體實現(xiàn)
下面以國家、省份兩級選擇為例,介紹在ASP中多級選擇的具體實現(xiàn)方法。
在SQL Server 7.0數(shù)據(jù)庫CountryDoc中存放兩級信息的表分別為CountryName char(20)和ProvinceName char(20)。
考慮到國家名、省/州名為字符串數(shù)據(jù),且不包含字符“0”,因此在選擇編碼方法時,采用5個連續(xù)的字符“0”作為不同數(shù)據(jù)項之間的分隔符。編碼后的省份數(shù)據(jù)具體形式為“北京00000上海00000黑龍江00000吉林”。
%>%>%>%>%>%>%>%>%>%>%>%>%>%>%>%>%>%>
以上代碼在NT 4.0+IIS 4.0+SQL Server 7.0+IE 5.0環(huán)境中運行通過。
由于整個工作都在一個ASP程序中完成,并且所有數(shù)據(jù)一次性下載到客戶端,用戶選擇時不存在“祖父”一級的選擇信息的保存問題(沒有刷新的工作)。
小 結
如果數(shù)據(jù)量不大的話,采用本文介紹的方法是可行的。但是當一個hidden中存儲的數(shù)據(jù)量超過2K時,受到HTML語言的自身限制,可能會存在hidden對象中數(shù)據(jù)丟失或缺少的問題,此時建議仍采用表單提取的方法來完成多級選擇。