ASP.NET MVC + Jquery 實現Ajax下拉框資料三級聯動

來源:互聯網
上載者:User

這是第一使用Jquery實現城市三級資料聯動的執行個體!之前本人沒有使用過Jquery,在WebForm的開發過程中,很多時候用的是ASP.NET Ajax,ajaxPro +JavaScript,從未使用過JS架構,最近在學習ASP.NET MVC,在最新的發布版本中,已經整合了Jquery 1.3.1,自然,也要學一學!發現使用Jquery代碼果然寫得比原始JS優雅!只是文法和方法太多,現在還沒弄熟,還需要時間來學習.....這次是第一次使用Jquery寫用戶端指令碼,如果大家發現更好的實現方法,請給我留言!謝謝!

註明:ASP.NET MVC 1.0 ,作者:0x001;

View:

<script type="text/javascript">
    $(document).ready(function() {
        GetByJquery();
        $("#ddlProvince").change(function() { GetCity() });
        $("#ddlCity").change(function() { GetDistrict() });
    });
    
    function GetByJquery() {

        $("#ddlProvince").empty(); //清空省份SELECT控制項

        $.getJSON("/ajax/GetProvinceList", function(data) {
            $.each(data, function(i, item) {
                $("<option></option>")
                    .val(item["ProvinceID"])
                    .text(item["ProvinceName"])
                    .appendTo($("#ddlProvince"));
            });
            GetCity();
        });     

    }

    function GetCity() {

        $("#ddlCity").empty(); //清空城市SELECT控制項
        var url ="/ajax/GetCityList/" + $("#ddlProvince").val();
        $.getJSON(url, function(data) {
            $.each(data, function(i, item) {
                $("<option></option>")
                    .val(item["CityID"])
                    .text(item["CityName"])
                    .appendTo($("#ddlCity"));
            });
            GetDistrict();
        });
    }

    function GetDistrict() {
        $("#ddlDistrict").empty(); //清空市區SELECT控制項
        var url = "/ajax/GetDistrictList/" + $("#ddlCity").val();
        
        $.getJSON(url, function(data) {
            $.each(data, function(i, item) {
                $("<option></option>")
                    .val(item["DistrictID"])
                    .text(item["DistrictName"])
                    .appendTo($("#ddlDistrict"));
            });
        });
    }

</script>
<table><tr><td><select id="ddlProvince"/></td><td><select id="ddlCity"/></td><td><select id="ddlDistrict" /></td></tr></table>

Controller :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;

namespace MvcBBS.Controllers
{
    public class AjaxController : Controller
    {
        //
        // GET: /Ajax/

        /// <summary>
        /// 擷取所有[省份]資料
        /// </summary>
        public ActionResult GetProvinceList()
        {
            if (!Request.IsAjaxRequest())
            {
                return Content("請不要非法方法,這是不道德的行為!");
            }

            BLL.Province bll = new MvcBBS.BLL.Province();
            List<MvcBBS.Model.S_Province> modellist = bll.GetProvinceList();

            return Json(modellist);
        }

        /// <summary>
        /// 擷取某[省份]的所有[城市]資料
        /// </summary>
        public ActionResult GetCityList(int id)
        {
            if (!Request.IsAjaxRequest())
            {
                return Content("請不要非法方法,這是不道德的行為!");
            }
            BLL.Province bll = new MvcBBS.BLL.Province();
            List<MvcBBS.Model.S_City> modellist = bll.GetCityList(id);
            return Json(modellist);
        }

        /// <summary>
        /// 擷取某[城市]的所有[市區]資料
        /// </summary>
        public ActionResult GetDistrictList(int id)
        {
            if (!Request.IsAjaxRequest())
            {
                return Content("請不要非法方法,這是不道德的行為!");
            }

            BLL.Province bll = new MvcBBS.BLL.Province();
            List<MvcBBS.Model.S_District> modellist = bll.GetDistrict(id);

            return Json(modellist);
        }

    }
}

我比較喜歡使用三層+原廠模式來讀寫資料,O/R Mapping不太適合我的要求!我們寫的項目經常不是為了方便移植,而是選擇明確的資料庫,需要更高的效能,更強的商務邏輯!大家看到上面的代碼,應該很熟悉,從資料庫讀資料到List<>中返回,並使有ASP.NET MVC內建的Json方法轉換資料並Response.

DAL:    

// BLL,Model就不貼出來了!

using System;
using System.Data;
using System.Text;
using System.Data.SqlClient;
using System.Collections.Generic;
using DBUtility;//請先添加引用

namespace MvcBBS.DAL
{
    public class Province
    {
        public Province()
        {}

        /// <summary>
        /// 擷取所有省份資料
        /// </summary>
        /// <returns></returns>
        public List<Model.S_Province> GetProvinceList()
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("SELECT ProvinceID,ProvinceName ");
            strSql.Append(" FROM S_Province ");
            List<Model.S_Province> modelList = new List<MvcBBS.Model.S_Province>();
            SqlDataReader dr = DbHelperSQL.ExecuteReader(strSql.ToString());            
            while (dr.Read())
            {
                 Model.S_Province _model = new MvcBBS.Model.S_Province();
                 _model.ProvinceID = int.Parse(dr["ProvinceID"].ToString());
                 _model.ProvinceName = dr.GetString(1);
                modelList.Add(_model);
            }
            dr.Close();
            return modelList;
        }

        /// <summary>
        /// 擷取某省份的所有城市資料
        /// </summary>
        /// <param name="ProvinceID"></param>
        /// <returns></returns>
        public List<Model.S_City> GetCityList(int ProvinceID)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("SELECT CityID,CityName,ZipCode");
            strSql.Append(" FROM S_City ");
            strSql.Append(" WHERE ProvinceID=");
            strSql.Append(ProvinceID.ToString());

            List<Model.S_City> modelList = new List<MvcBBS.Model.S_City>();
            SqlDataReader dr = DbHelperSQL.ExecuteReader(strSql.ToString());
            while (dr.Read())
            {
                Model.S_City _model = new MvcBBS.Model.S_City();
                _model.CityID = int.Parse(dr["CityID"].ToString());
                _model.CityName = dr.GetString(1);
                _model.ZipCode = dr.GetString(2);
                _model.ProvinceID = ProvinceID;
                modelList.Add(_model);
            }
            dr.Close();
            return modelList;
        }

        /// <summary>
        /// 擷取某城市的所有市區
        /// </summary>
        /// <param name="CityID"></param>
        /// <returns></returns>
        public List<Model.S_District> GetDistrict(int CityID)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("SELECT DistrictID,DistrictName");
            strSql.Append(" FROM S_District ");
            strSql.Append(" WHERE CityID=");
            strSql.Append(CityID.ToString());

            List<Model.S_District> modelList = new List<MvcBBS.Model.S_District>();
            SqlDataReader dr = DbHelperSQL.ExecuteReader(strSql.ToString());
            while (dr.Read())
            {
                Model.S_District _model = new MvcBBS.Model.S_District();
                _model.DistrictID = int.Parse(dr["DistrictID"].ToString());
                _model.DistrictName = dr.GetString(1);
                _model.CityID = CityID;
                modelList.Add(_model);
            }
            dr.Close();
            return modelList;
        }
    }
}

轉載請註明: 0x001.com ,謝謝!大家多多提點建議!本人需要學習和改進的動力! 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.