首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

EasyTools 聯動下拉選單 (Cascading DropDown) 完整使用指南

     編輯:關於ASP.NET

EasyTools 元件庫提供的聯動下拉選單控制項,支援兩級選單(大分類→小分類)資料綁定與客戶端互動,適合省市、年級班級等層級資料場景。

控制項外觀與效果

聯動選單展開狀態

聯動選單互動示意

核心屬性說明

屬性型別說明
Big_Labelstring一級選單標籤文字(支援 HTML),如「省份」、「年級」
Small_Labelstring二級選單標籤文字(支援 HTML),如「城市」、「班級」
BigDataList<BigItem>一級選單資料來源,BigItem 包含 Value、Text 屬性
SmallDataList<SmallItem>二級選單資料來源,SmallItem 包含 BigValue(關聯一級值)、Value、Text
BigValuestring一級選單目前選中值
SmallValuestring二級選單目前選中值

資料結構定義

public class BigItem {
    public string Value { get; set; }   // 如 "1" 代表省份代碼
    public string Text { get; set; }    // 如 "浙江省"
}

public class SmallItem {
    public string BigValue { get; set; } // 關聯的 BigItem.Value
    public string Value { get; set; }    // 如 "101" 代表城市代碼
    public string Text { get; set; }     // 如 "杭州市"
}

後端資料綁定範例

protected void Page_Load(object sender, EventArgs e) {
    if (!IsPostBack) {
        // 模擬省市資料
        var provinces = new List {
            new BigItem { Value = "1", Text = "浙江省" },
            new BigItem { Value = "2", Text = "江蘇省" }
        };
        
        var cities = new List {
            new SmallItem { BigValue = "1", Value = "101", Text = "杭州市" },
            new SmallItem { BigValue = "1", Value = "102", Text = "寧波市" },
            new SmallItem { BigValue = "2", Value = "201", Text = "南京市" },
            new SmallItem { BigValue = "2", Value = "202", Text = "蘇州市" }
        };
        
        CascadingDropDown1.Big_Label = "省份";
        CascadingDropDown1.Small_Label = "城市";
        CascadingDropDown1.BigData = provinces;
        CascadingDropDown1.SmallData = cities;
        
        // 預設選中
        CascadingDropDown1.BigValue = "1";
        CascadingDropDown1.SmallValue = "101";
    }
}

客戶端 onchange 事件處理

onchange 事件屬性設定

// 一級選單變更時觸發
protected void CascadingDropDown1_BigSelectedIndexChanged(object sender, EventArgs e) {
    string selectedProvince = CascadingDropDown1.BigValue;
    // 可在此進行伺服端邏輯:載入該省份下的其他資料、更新 GridView 等
    LoadDataByProvince(selectedProvince);
}

// 二級選單變更時觸發
protected void CascadingDropDown1_SmallSelectedIndexChanged(object sender, EventArgs e) {
    string selectedCity = CascadingDropDown1.SmallValue;
    LoadDataByCity(selectedCity);
}

前端 JavaScript 互動(進階)

<script>
    // 取得控制項 ClientID
    var bigDDL = document.getElementById('<%= CascadingDropDown1.FindControl("BigDropDown").ClientID %>');
    var smallDDL = document.getElementById('<%= CascadingDropDown1.FindControl("SmallDropDown").ClientID %>');
    
    // 手動觸發二級選單更新(如從其他控制項聯動)
    function updateCities(provinceValue) {
        bigDDL.value = provinceValue;
        // 觸發控制項內建的 change 事件
        if (bigDDL.onchange) bigDDL.onchange();
    }
</script>

常見問題與解決

問題解決
二級選單不更新確認 SmallData 中 BigValue 與 BigItem.Value 完全一致(含型別)
PostBack 後選中值消失在 Page_Load 非 PostBack 區塊綁定資料,選中值在 ViewState 自動保持
需支援三級聯動EasyTools 僅支援兩級,需自行擴充或使用 jQuery Cascading DropDown Plugin
資料量大效能問題改用 AJAX 回呼動態載入二級資料,避免一次性輸出所有 SmallItem

替代方案:純前端 jQuery 實作

<select id="province"></select>
<select id="city" disabled></select>

<script>
    var data = {
        "1": [{"v":"101","t":"杭州"},{"v":"102","t":"寧波"}],
        "2": [{"v":"201","t":"南京"},{"v":"202","t":"蘇州"}]
    };
    
    $("#province").change(function() {
        var val = $(this).val();
        var $city = $("#city").empty().prop("disabled", !val);
        if (val) $.each(data[val], function() {
            $city.append($("<option>").val(this.v).text(this.t));
        });
    });
</script>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved