地址連動功能,選擇縣市後在下一個DropDownList出現鄉鎮市區_ASP.NET

地址連動功能,選擇縣市後在下一個DropDownList出現鄉鎮市區_ASP.NET

這個功能再平凡不過了,這篇文章用 Entity Framework 實作,請各位朋友多指教。

先看一下執行的畫面,一開始是上面兩個待選擇的 DropDownList,上圖因為還沒有選擇縣市,所以在鄉鎮市區的地方沒有顯示出來,下圖則是已選擇縣市為台北市,右方就出現台北市所屬的分區。

image

資料庫有兩張表,分別是 City 和 Country

資料表:City 資料表:Country
image image

程式功能很簡單,選擇縣市之後右方的 DropDownList 會出現所屬鄉鎮市

畫面程式碼

    <div>
        縣市:<asp:DropDownList ID="ddlCity" runat="server" 
            AutoPostBack="True" onselectedindexchanged="ddlCity_SelectedIndexChanged">
        </asp:DropDownList>
        &nbsp;鄉鎮市區:<asp:DropDownList ID="ddlCountry" runat="server">
        </asp:DropDownList>
    </div>
    </form>

程式碼

        {
            if (!IsPostBack)
            {
                bindCity();
                setDDLDefault();
            }
        }

        /// <summary>
        /// 繫結縣市
        /// </summary>
        private void bindCity()
        {
            MyTestDBEntities entity = new MyTestDBEntities();
            var city = from c in entity.City
                       select new
                       {
                           cityID = c.cityID,
                           cityName = c.cityName
                       };

            ddlCity.DataSource = city;
            ddlCity.DataTextField = "cityName";
            ddlCity.DataValueField = "cityID";
            ddlCity.DataBind();
        }

        /// <summary>
        /// 用縣市ID繫結鄉鎮市區
        /// </summary>
        private void bindCountry()
        {
            MyTestDBEntities entity = new MyTestDBEntities();
            int cityID = Int32.Parse(ddlCity.SelectedValue);
            var country = from c in entity.Country
                          where c.cityID == cityID
                          select new
                          {
                              countryID = c.countryID,
                              countryName = c.countryName
                          };

            ddlCountry.DataSource = country;
            ddlCountry.DataTextField = "countryName";
            ddlCountry.DataValueField = "countryID";
            ddlCountry.DataBind();
        }

        /// <summary>
        /// 將兩個 DropDownList 的預設第一個選項都設定為「請選擇」
        /// </summary>
        private void setDDLDefault()
        {
            ddlCity.Items.Insert(0, new ListItem("請選擇", "-1"));
            ddlCountry.Items.Insert(0, new ListItem("請選擇", "-1"));
        }

        /// <summary>
        /// 選擇了縣市後帶出鄉鎮市區
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ddlCity_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlCity.SelectedValue != "-1")
            {
                bindCountry();
            }
            else
            {
                ddlCountry.Items.Clear();
                ddlCountry.Items.Insert(0, new ListItem("請選擇", "-1"));
            }
        }