Ajax编程备忘之——Combobox无刷新填充
编程思路如下:
1:后台根据前台传来的上级部门ID,获取对应的下级部门,然后组成格式为
部门代码1-部门名称1|部门代码2-部门名称2|部门代码3-部门名称3.....
前台Client端根据传来的字符串进行拆分,然后用javascript重新组织下级部门的Combobox
2:后台取Combobox值的时候用Request['ComboboxID']方式获取,不用Combobox.Value
[第2条适用于Asp.net]
javascript部分的代码:
//上级部门修改后,下级部门也要随着改动
function DepartmentChange()
{
var objDept=document.all['cmbDeptID'];
var objSubDept=document.all['cmbSubDeptID'];
if(objDept && objSubDept)
{
//Ajax调用
var response = Register.RefillDept(objDept.value,'-');
if(response.value!="")
{
var length=1;
while(length!=0)
{
var length=objSubDept.options.length;
for(var i=0;i<length;i++)
objSubDept.options.remove(i);
length=length/2;
}
var strItem=response.value.split('|');
if(strItem.length>0)
{
for(var n=0;n<strItem.length;n++)
{
var option=document.createElement("option");
option.value=strItem[n];
option.text=strItem[n];
//alert(option.value);
objSubDept.options.add(option);
}
}
}
}
}
Asp.net后台Server端代码:
/// <summary>
/// 获取部门改变后对应下级部门的信息
/// </summary>
/// <param name="strDept">部门编码-部门名称</param>
/// <param name="strSeparetor">拆分符号</param>
/// <returns>对应下级部门,格式:部门1|部门2|部门3</returns>
[Ajax.AjaxMethod()]
public string RefillDept(string strDept,string strSeparetor)
{
string strDeptString="";
try
{
string []strItem=strDept.Split(strSeparetor.ToCharArray());
if(strItem.Length>1)
{
OLExamDepartment objOLExamDepartment=new OLExamDepartment();
DataSet dstDept=objOLExamDepartment.GetDepartInfo(strItem[0]);
if(dstDept!=null)
{
if(dstDept.Tables[0].Rows.Count>0)
{
//组成返回字符串
for(int i=0;i<dstDept.Tables[0].Rows.Count;i++)
{
strDeptString=strDeptString+dstDept.Tables[0].Rows[i]["DeptCode"].ToString()+"-"+dstDept.Tables[0].Rows[i]["DeptName"].ToString()+"|" ;
}
}
}
if(strDeptString.Length>0)
{
strDeptString=strItem[0]+"-本部|"+strDeptString.Substring(0,strDeptString.Length-1);
}
else
{
strDeptString=strItem[0]+"-本部";
}
}
return strDeptString;
}
catch(Exception ex)
{
return "";
}
}