• 基于MVC3下拉列表联动(JQuery)


    上次项目中遇到一个需要多个下拉列表联动的操作,今天有空将实现方式整理以便以后参考。

    要达到的效果是,点击一个下拉框,则另一个下拉框的值发生对应变化。如:选择中国,则另个一下拉框里显示中国各个省份。

    传统的HTML方式比较简单,实际上基于MVC的实现方式也大同小异。

    直接上代码:

     public class DP_Provice
        {
            public int proviceID { get; set; }

            public string ProviceName { get; set; }

            public int ProviceNode { get; set; }

            public virtual List<DP_City> citySource { get; set; }

        }


        public class DP_City
        {
            public int CityNode { get; set; }

            public string CityName { get; set; }

            public string ProviceNode { get; set; }

        } 

    对以上涉及到的实体类予以赋值,暂时使用一个静态类初始化简单数据:

     public static class DPDataSource
        {
            public static List<DP_Provice> InitalData()
            {
                List<DP_Provice> source = new List<DP_Provice>
                {
                    new DP_Provice{ ProviceNode=1, ProviceName="北京", citySource=new List<DP_City>{
                     new DP_City{
                      CityNode=11, CityName="北京海淀"
                     },
                     new DP_City{
                     CityNode=12,CityName="北京西城"
                     }                
                    }},

                    new DP_Provice{ ProviceNode=2, ProviceName="山东", citySource=new List<DP_City>{
                     new DP_City{
                      CityNode=21, CityName="济南"
                     },
                     new DP_City{
                     CityNode=22,CityName="德州"
                     }                
                    }},


                    new DP_Provice{ ProviceNode=3, ProviceName="河北", citySource=new List<DP_City>{
                     new DP_City{
                      CityNode=31, CityName="石家庄"
                     },
                     new DP_City{
                     CityNode=32,CityName="衡水"
                     }                
                    }}
                };


                return source;
            }

        }

    具体在Controller中的调用,因为使用的JQuery中的AJAX方式,所以返回的结果类型为Json;

     public ActionResult Index()
            {
                return View("DPShow");
            }

            List<DP_Provice> source = DPDataSource.InitalData();



            public JsonResult GetProvinceSource()
            {
                if (source == null || source.Count < 0)
                {
                    source = DPDataSource.InitalData();
                }
                return Json(source, JsonRequestBehavior.AllowGet);
            }

            public JsonResult GetCitySource(string proviceName)
            {
                source = DPDataSource.InitalData();
                List<DP_City> citySource = new List<DP_City>();
                citySource = source.Where(a => a.ProviceNode.ToString().Contains(proviceName)).First().citySource;
                return Json(citySource, JsonRequestBehavior.AllowGet);
            }


    数据准备完毕,此时需要Razor视图中进行绑定和展示,代码如下:

    @model MvcApplication.Models.DP_Provice
    @{
        ViewBag.Title = "DPShow";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
    <script type="text/javascript">

        $(function myfunction() {
            GetPlant();

    //初始化省份数据

           $("#ddlProvince").change(function ff() {  //设置当省份下拉列表发生变化时,更新城市数据列表
                GetCity();
            });

        });


        function GetPlant() {
            $("#ddlProvince").empty();
            var url = "/Dropdown/GetProvinceSource/";

            $.getJSON(url, function (data) {

                $.each(data, function (i, item) {
                    $("<option></option>")
                            .val(item["ProviceNode"])
                            .text(item["ProviceName"])
                            .appendTo($("#ddlProvince"));
                });
                GetCity();
            });
        }
        function GetCity() {
            $("#ddlCity").empty();
            var temp=$("#ddlProvince").val();
            var url ="@Url.Action("GetCitySource", "Dropdown")" ; 

    //使用MVC3中Url.Action 方法参数依次为:aciton ; controller ; area ;

     
            $.getJSON(url,{"proviceName":temp}, function (data) {

    //中间需要用到参数 所以采用在getJSON方法中实现

                $.each(data, function (i, item) {
                    $("<option></option>")
                        .val(item["CityNode"])
                        .text(item["CityName"])
                        .appendTo($("#ddlCity"));
                });
            });
        }

    </script>
    <! DOCTYPE html />
    <h2>
        下拉列表联动</h2>
    <table>
        <tr>
            <td>
                <select id="ddlProvince" />
            </td>
            <td>
                <select id="ddlCity" />
            </td>
        </tr>
    </table>

    说明:


    一般来讲,采用MVC实现下拉列表绑定可以有多种方式,主要是数据绑定方式可以使用JQuery中的Ajax 方式,同时也可以使用自定义的基于MVC 的 Url.Acion 方式,个人建议使用基于MVC 的 Url.Acion

    一来是支持方式比较灵活,如果中间涉及到数据类型复杂,可以自定义,实现数据封装;

    二来是JQuery 中URL在传递参数时需要格式化,否则将无法找到指定的Action。

    如有大家对上述说法有异议或者更好的实现方案,请给予指正或说明,谢谢。

  • 相关阅读:
    多状态场景:后端只记录行为,不记录行为的含义,比如产品定义的状态值含义;行为是客观的,不变的。
    Golang协程池的使用 原创 360质量效能 360质量效能 2021-05-28
    &strct new
    【Golang】图解函数调用栈
    Mybatis-Plus的应用场景及注入SQL原理分析
    倒计时时间到触发事件
    浅析软件供应链攻击之包抢注低成本钓鱼
    腾讯代码安全指南开源,涉及C/C++、Go等六门编程语言 https://mp.weixin.qq.com/s/yzg5uVnoJDTyaH2Wn8Vo7w
    58黄页标签提取及海量多分类优化
    引用站点策略: strict-origin-when-cross-origin 引用站点策略: no-referrer-when-downgrade
  • 原文地址:https://www.cnblogs.com/riskyer/p/3295245.html
Copyright © 2020-2023  润新知