用ajax實現dropdownlist多級聯動執行個體

來源:互聯網
上載者:User

 

經常用dropdownlist綁定資料,涉及到多級聯動的問題,重新整理頁面不太好,於是花了點時間,用AjaxPro來實現無重新整理綁定DropDownList資料的問題。
--------------------------------------------------------------------------------

執行個體:
實現省、市、縣三級DropDownList資料無重新整理綁定
思想:
在頁面載入時從資料庫中讀取並綁定省份資料,然後根據省份當前的DropDownList所選id來綁定市資料,最後根據市的DropDownList所選id來綁定縣資料。
然後當使用者改變省的DropDownList,用AjaxPro技術傳值(當前所選的省id),根據所選的省id來綁定市與縣的DropDownList,當改變市的DropDownList時原理一樣。.cs頁面從資料庫中等到的資料以xml的形式傳回給頁面,然後用javascript來分析處理綁定。
看不明白沒關係,看下代碼實現就明白了。
示:

準備:
首先需要將AjaxPro.2部署到您的項目中,如果部署AjaxPro.2請查看這裡《查看如何部署ajaxpro》。
代碼:
頁面中的三個dropdownlist,分別是省、市、縣:
 
<asp:DropDownList ID="ddlp" runat="server">
</asp:DropDownList>
<asp:DropDownList ID="ddlc" runat="server">
</asp:DropDownList>
<asp:DropDownList ID="ddlx" runat="server">
</asp:DropDownList>頁面載入時綁定三個DropDownList控制項:
protected void Page_Load(object sender, EventArgs e)
{
#region 註冊無重新整理
AjaxPro.Utility.RegisterTypeForAjax(typeof(alldeadmin_usercontrol_areaUc));
#endregion
if (!this.IsPostBack)
{
this.bindproData();//綁定省份
this.bindcityData(); //市資料繫結
this.bindxianData();//縣級資料繫結
}
}具體對三個DropDownList控制項綁定的代碼:
/// <summary>
/// 省份資料dropdownlist綁定
/// </summary>
private void bindproData()
{
BLL.alldeadmin.areabll myareabll = new areabll();
this.ddlp.DataSource = myareabll.GetAllListp();
this.ddlp.DataTextField = "proName";
this.ddlp.DataValueField = "id";
this.ddlp.DataBind();
this.ddlp.Attributes.Add("onchange", "loadCity(opDdlSelect(this));");//當省下拉式清單改變時綁定市與縣事件,此事件處理常式通過javascript來實現,下面將提到。
}
/// <summary>
///市資料dropdownlist綁定
/// </summary>
private void bindcityData()
{
this.ddlc.DataSource = this.returncityData(this.ddlp.SelectedValue);
this.ddlc.DataTextField = "cityName";
this.ddlc.DataValueField = "id";
this.ddlc.DataBind();
this.ddlc.Attributes.Add("onchange", "loadXian(opDdlSelect(this))");//當市下拉式清單改變時綁定縣事件,此事件處理常式通過javascript來實現,下面將提到。

}
/// <summary>
///縣資料dropdownlist綁定
/// </summary>
private void bindxianData()
{
this.ddlx.DataSource = this.returnxianData(this.ddlc.SelectedValue);
this.ddlx.DataTextField = "xianName";
this.ddlx.DataValueField = "id";
this.ddlx.DataBind();
}從資料庫中返回某市的資料和縣的資料:
  /// <summary>
    /// 返回市資料
    /// </summary>
    private DataSet returncityData(string state)
    {
        BLL.alldeadmin.areabll myareabll = new areabll();
        string tw = " where ProId=" + state;
        return myareabll.GetListc(tw);
    }
    /// <summary>
    /// 返回縣資料
    /// </summary>
    private DataSet returnxianData(string state)
    {
        BLL.alldeadmin.areabll myareabll = new areabll();
        string tw = " where cityId=" + state;
        return myareabll.GetListx(tw);
    }這裡是和aspx頁面無重新整理返回資料的地方:
/// <summary>
    /// 無重新整理向頁面返回市級資料
    /// </summary>
    /// <param name="state"></param>
    /// <returns></returns>
    [AjaxPro.AjaxMethod]
    public string getcity(string state)
    {
        return returncityData(state).GetXml();
    }

    /// <summary>
    /// 無重新整理向頁面返回縣級資料
    /// </summary>
    /// <param name="state"></param>
    /// <returns></returns>
    [AjaxPro.AjaxMethod]
    public string getxian(string state)
    {
        return returnxianData(state).GetXml();
    }

前台.aspx頁面的javascript處理模組
javascript是對xml處理的,我返回的xml結構為

<script language="javascript" type="text/javascript">
<!--
//返回當前ddl的值(輔助函數)
function opDdlSelect(objectSelect)
{
    if(objectSelect!=null)
    {
        return objectSelect.options[objectSelect.selectedIndex].value;
    }
}

//市級資料處理
 function loadCity(state)
  {
  alldeadmin_usercontrol_areaUc.getcity(state,callback);//裝載市資料
  alldeadmin_usercontrol_areaUc.getxian(state,callbackxian);//裝載縣資料
  }
  
  function callback(res)  //回呼函數
        {
             var drp2 = document.getElementById("<%=ddlc.ClientID %>");////因為這個例子是作為使用者控制項在啟動並執行,所以不能用 javascript直接引用控制項名稱,需要用控制項.ClientID 屬性來擷取控制項的用戶端id。
             var iteml=drp2.options.length -1;//清空dropdownlist裡的項內容
          for(var i = 0;i<=iteml;i++)
          {
          drp2.remove(iteml-i);
          }
          var oDoc = new ActiveXObject("MSXML2.DOMDocument");
          result=res.value;//取得xml資料
          oDoc.loadXML(result);
          items = oDoc.selectNodes("//NewDataSet/ds");
              for (var item = items.nextNode(); item; item = items.nextNode()){
              var city = item.selectSingleNode("cityName").nodeTypedValue;
              var cid=item.selectSingleNode("id").nodeTypedValue;
              var newOption = document.createElement("OPTION");
              newOption.text = city;
              newOption.value = cid;
              drp2.options.add(newOption);
              }
        }
 //縣資料處理      
 function loadXian(state)
  {
  var getobject = alldeadmin_usercontrol_areaUc.getxian(state,callbackxian);
  }
  
  function callbackxian(res)  //回呼函數
        {
             var drp2 = document.getElementById("<%=ddlx.ClientID %>");
             var iteml=drp2.options.length -1;//清空dropdownlist裡的項內容
          for(var i = 0;i<=iteml;i++)
          {
          drp2.remove(iteml-i);
          }
          var oDoc = new ActiveXObject("MSXML2.DOMDocument");
          result=res.value;//取得xml資料
          oDoc.loadXML(result);
          items = oDoc.selectNodes("//NewDataSet/ds");
              for (var item = items.nextNode(); item; item = items.nextNode()){
              var city = item.selectSingleNode("xianName").nodeTypedValue;
              var cid=item.selectSingleNode("id").nodeTypedValue;
              var newOption = document.createElement("OPTION");
              newOption.text = city;
              newOption.value = cid;
              drp2.options.add(newOption);
              }
        }      
-->
</script>

文章來源(WEB開發技術知識庫):http://www.cn-web.com/cnweb/0/483/article/483.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.