1.说明AjaxPro.2.dll的简单使用。实现省市县级联下拉框异步刷新。
2. 首先添加引用。在bin->添加引用->添加AjaxPro.2.dll即可。
3. 修改web.config。在System.web和compilation节点之间添加。如下所示:
代码
<system.web>
<httpHandlers>
<add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>
</httpHandlers>
<compilation debug="true" targetFramework="4.0"/>
<httpHandlers>
<add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>
</httpHandlers>
<compilation debug="true" targetFramework="4.0"/>
4. 在page_load先注册一下,如下所示。注意参数名字为该页面的类名称。
代码
public partial class CascadeDropdownlist : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(CascadeDropdownlist));
。。。。。。
{
protected void Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(CascadeDropdownlist));
。。。。。。
5. 添加方法。注意先要添加[AjaxPro.AjaxMethod]。而且在返回城市列表的时候本人返回的是dataset或者datatable,如果返回的是数组或者字符串之类的,那么前台控件绑定的时候会出错。本人也是初学,具体的原理不是很清楚。还望高手指教。
代码
[AjaxPro.AjaxMethod]
public DataSet BindCity(string ProvinceID)
{
string sql = "select * from City where ProvinceID='" + ProvinceID + "'";
db db = new db();
DataSet ds = db.GetDataSet(sql, "city");
db.Close();
return ds;
}
public DataSet BindCity(string ProvinceID)
{
string sql = "select * from City where ProvinceID='" + ProvinceID + "'";
db db = new db();
DataSet ds = db.GetDataSet(sql, "city");
db.Close();
return ds;
}
6. 前台页面
代码
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="ddlProvince" runat="server" >
</asp:DropDownList>
<asp:DropDownList ID="ddlCity" runat="server">
</asp:DropDownList>
<asp:DropDownList ID="ddlArea" runat="server">
</asp:DropDownList>
</div>
</form>
</body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="ddlProvince" runat="server" >
</asp:DropDownList>
<asp:DropDownList ID="ddlCity" runat="server">
</asp:DropDownList>
<asp:DropDownList ID="ddlArea" runat="server">
</asp:DropDownList>
</div>
</form>
</body>
7. JS脚本。这两个方法其实差不多,搞明白一个就基本OK了。起初将列表绑定到下拉框总想用city.Options.Add(new Option(value,text))这样的方法,结果失败了。调用不到。后来改用的下面的写法。
代码
<script language ="javascript" type ="text/javascript" >
//根据省ID绑定市列表
function BindCity() {
var province = document.getElementById("ddlProvince");
var id = province.value;
var city = document.getElementById("ddlCity");
city.length = 1;
var area = document.getElementById("ddlArea");
area.length = 1;
var ds = CascadeDropdownlist.BindCity(id).value;
if (ds != null && typeof (ds) == "object" && ds.Tables != null) {
if (ds.Tables[0].Rows.length > 0) {
for (var i = 0; i < ds.Tables[0].Rows.length; i++) {
var op = document.createElement("option");
op.setAttribute("value",ds.Tables[0].Rows[i]["CityID"]);
var txt = document.createTextNode(ds.Tables[0].Rows[i]["City"]);
op.appendChild(txt);
city.appendChild(op);
}
}
}
}
//根据市ID绑定县列表
function BindArea() {
var city = document.getElementById("ddlCity");
var id = city.value;
var area = document.getElementById("ddlArea");
area.length = 1;
var ds = CascadeDropdownlist.BindArea(id).value;
if (ds != null && typeof (ds) == "object" && ds.Tables != null) {
if (ds.Tables[0].Rows.length > 0) {
for (var i = 0; i < ds.Tables[0].Rows.length; i++) {
var op = document.createElement("option");
op.setAttribute("value", ds.Tables[0].Rows[i]["AreaID"]);
var txt = document.createTextNode(ds.Tables[0].Rows[i]["Area"]);
op.appendChild(txt);
area.appendChild(op);
}
}
}
</script>
//根据省ID绑定市列表
function BindCity() {
var province = document.getElementById("ddlProvince");
var id = province.value;
var city = document.getElementById("ddlCity");
city.length = 1;
var area = document.getElementById("ddlArea");
area.length = 1;
var ds = CascadeDropdownlist.BindCity(id).value;
if (ds != null && typeof (ds) == "object" && ds.Tables != null) {
if (ds.Tables[0].Rows.length > 0) {
for (var i = 0; i < ds.Tables[0].Rows.length; i++) {
var op = document.createElement("option");
op.setAttribute("value",ds.Tables[0].Rows[i]["CityID"]);
var txt = document.createTextNode(ds.Tables[0].Rows[i]["City"]);
op.appendChild(txt);
city.appendChild(op);
}
}
}
}
//根据市ID绑定县列表
function BindArea() {
var city = document.getElementById("ddlCity");
var id = city.value;
var area = document.getElementById("ddlArea");
area.length = 1;
var ds = CascadeDropdownlist.BindArea(id).value;
if (ds != null && typeof (ds) == "object" && ds.Tables != null) {
if (ds.Tables[0].Rows.length > 0) {
for (var i = 0; i < ds.Tables[0].Rows.length; i++) {
var op = document.createElement("option");
op.setAttribute("value", ds.Tables[0].Rows[i]["AreaID"]);
var txt = document.createTextNode(ds.Tables[0].Rows[i]["Area"]);
op.appendChild(txt);
area.appendChild(op);
}
}
}
</script>
OK,至此一个简单的小例子完成了。