没接触过ajax,又苦与项目中经常遇到联动的情况,看了小山的例子,发现一不小心爱上ajax了http://www.cnblogs.com/singlepine/archive/2005/10/19/257954.aspx
修改了下小山的程序,支持了后台读取数据设定 DropDownList的selected值。
TextBox17用来读取省id,TextBox18用来读取城市id,TextBox19用来读取注册时的城市id。
由于ajax还是需要从服务器得到数据,所以不能用function selected()
...
{
cityResult();
var DDLid=document.getElementById("Useraction1_DropDownList2");
var TBox=document.getElementById("Useraction1_Textbox19");
DDLid.value=TBox.value;
getData();
}
的形式,,而需要设定一定的延时,window.setTimeout(
"
selected_getdata()
"
,
500
); 

//
城市------------------------------
function
cityResult() 
...
{
var city=document.getElementById("Useraction1_DropDownList1");
liandong.GetCityList(city.value,get_city_Result_CallBack);
}
function
selected()
...
{
cityResult();
window.setTimeout("selected_getdata()",500);
}
function
selected_getdata()
...
{
var DDLid=document.getElementById("Useraction1_DropDownList2");
var TBox=document.getElementById("Useraction1_Textbox19");
DDLid.value=TBox.value;
getData();
}
function
get_city_Result_CallBack(response)
...
{
if (response.value != null)
...{
//debugger;
document.all("Useraction1_DropDownList2").length=0;
var ds = response.value;
if(ds != null && typeof(ds) == "object" && ds.Tables != null)
...{
var DDLid=document.all("Useraction1_DropDownList2");
for(var i=0; i<ds.Tables[0].Rows.length; i++)
...{
var name=ds.Tables[0].Rows[i].shiname;
var id=ds.Tables[0].Rows[i].shiid;
DDLid.options.add(new Option(name,id));
}
getData();
}
}
return
}
function
getData()
...
{
var province=document.getElementById("Useraction1_DropDownList1");
var pindex = province.selectedIndex;
var pValue = province.options[pindex].value;
// var pText = province.options[pindex].text;
var city=document.getElementById("Useraction1_DropDownList2");
var txt1=document.getElementById("Useraction1_TextBox17");
var txt2=document.getElementById("Useraction1_TextBox18");
if(city.length>0)
...{
var cindex = city.selectedIndex;
var cValue = city.options[cindex].value;
//var cText = city.options[cindex].text;
txt1.value=pValue;
txt2.value=cValue;
}
else
...{
txt1.value=pValue;
txt2.value=0;
}
}
<
tr
>
<
td
style
="WIDTH: 108px"
align
="right"
width
="108"
bgColor
="#ffffff"
><
asp:textbox
id
="TextBox17"
runat
="server"
Width
="0px"
></
asp:textbox
><
asp:textbox
id
="TextBox18"
runat
="server"
Width
="0px"
></
asp:textbox
><
asp:textbox
id
="Textbox19"
runat
="server"
Width
="0px"
></
asp:textbox
></
td
>
<
td
bgColor
="#ffffff"
colSpan
="2"
>
省:
<
asp:dropdownlist
id
="DropDownList1"
runat
="server"
></
asp:dropdownlist
>
市:
<
asp:dropdownlist
id
="DropDownList2"
runat
="server"
></
asp:dropdownlist
></
td
>
</
tr
>
后台:
Textbox19.Text
=
reader.Item(
1
)
Response.Write(
"
<script for=window event=onload>selected();</
"
&
"
script>
"
)

liandong.vb

Public
Class liandong
Class liandong
Public Function GetProvinceList()Function GetProvinceList() As DataSet
Dim sql As String
sql = "select shengid,shengname from sheng order by shengorder"
Return GetDataSet(sql)
End Function

Public Function GetDataSet()Function GetDataSet(ByVal sql As String) As DataSet
Dim myDataAdapter As SqlClient.SqlDataAdapter
myDataAdapter = New SqlClient.SqlDataAdapter(sql, getdata.myconn)
Dim myDataSet As DataSet
myDataSet = New DataSet
myDataAdapter.Fill(myDataSet)
Return myDataSet
End Function

'Ajax Start
'Get the name of city
<Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.Read)> _
Public Function GetCityList()Function GetCityList(ByVal shengid As Integer) As DataSet
Dim sql As String
sql = "select shiid,shiname from shi where shengid=" & shengid & "order by shiorder"
Return GetDataSet(sql)
End Function
End Class

另:Ajax实现调用后台方法
首先把Ajax.dll文件复制到项目所在文件夹下的bin下,然后在VS项目的引用添加Ajax.dll文件。
其次在Web.Config文件中的<system.web>里添加如下代码:
<httpHandlers>
<add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" />
</httpHandlers>
其中Ajax是指刚才引用的dll文件。
新建一个AjaxMethod类,添加方法的方式如下:
[Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.Read)]
public DataSet GetCityList()
{
//TODO:Add Your Codes here
}
接着在所建页面的cs文件(如WebForm1.aspx.cs)中的Page_load()中添加如下代码即可在页面调用后台方法:
Utility.RegisterTypeForAjax(typeof(AjaxTest.AjaxMethod));
对于AjaxTest.AjaxMethod,AjaxTest为命名空间,AjaxMethod为AjaxTest下的类。
在前台我们就可以用以下方式调用后台的方法了:
AjaxMethod.GetCityList(value,get_city_Result_CallBack);
function get_city_Result_CallBack(response){}
第一行中的value为要传到后台的值,get_city_Result_CallBack为前台的一个方法函数。
执行完第一句之后就转到执行第二句,response为后台返回前台的值,这个值不一定是一个数,此例中它是一个DataSet。

本文介绍如何利用Ajax技术实现实时更新的省市区联动下拉框功能,并通过后台获取数据来设置选中项。文章详细展示了JavaScript前端代码与后台数据交互的过程。
159

被折叠的 条评论
为什么被折叠?



