前言
看到网上很多关于ASP.NET的无刷新选择列表框,服务器端有的返回DataSet,有的返回DataView,有的用分隔符拼接一个长字符串返回,相应的客户端解析也是各有不同。DataSet+JS我是怎么也没弄成过,顺便在这里讲下返回DataSet不存在数据库关闭与否的问题。前端时间我上司写了一个这样的东西我改了下还蛮好用的,不敢独享,与大家分享一下吧:)
正题
服务器端代码:
///
<summary>
///
Ajax服务器端响应方法
///
</summary>
///
<param name="param"></param>
///
<returns></returns>
[AjaxPro.AjaxMethod]
public
List
<
List
<
string
>>
GetData(
string
param)
{
//
获得数据
Hashtable ht
=
DBHelper.GetDDLHashData(param);
List
<
List
<
string
>>
list
=
new
List
<
List
<
string
>>
();
List
<
string
>
ilist;
//
迭代拷贝数据
foreach
(DictionaryEntry item
in
ht)
{
ilist
=
new
List
<
string
>
();
ilist.Add(item.Key.ToString());
ilist.Add(item.Value.ToString());
list.Add(ilist);
}
return
list;
}
代码基本上不难,用泛型来包装一个List返回给客户端。再看客户端代码:
//
添加Dropdownlist内容
function
AddItemsTosDropdown(array,obj)
{
try
{
var
GetObj
=
document.getElementById(obj);
GetObj.length
=
0
;
GetObj.options.add(
new
Option(
"
请选择
"
,
""
));
for
(
var
i
=
0
;i
<
array.length;i
++
){
GetObj.options.add(
new
Option(array[i][
1
],array[i][
0
]));
}
}
catch
(e){
alert(e.message);
}
}
调用js方法代码:
function
selectChangeData(selectedValue)
{
try
{
//
获得数据并添加到列表框
AddItemsTosDropdown(ItemSeach.GetData(String(selectedValue)).value,
"
<%=ddlControl.ClientID%>
"
);
}
catch
(e){
alert(e.message);
}
}
OK!没有一点问题,复制代码只需要改下数据源获取就可以用了,比较通用,但是别忘了AjaxPro使用的基本设置。
大家也可以在这个基础上加强,写得更通用一些:)
补充说明:
感谢上司,但是不知道上司是不是也是拿来主义,所有来个通用的:感谢代码的原作者:)