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

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

传统的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。

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

基于MVC3下拉列表联动(JQuery)的更多相关文章

  1. JQuery+Ajax实战三级下拉列表联动(八)

    本片文章为练习,项目中不会这样写: 一:涉及到的知识点: jQuery Dom操作 jQuery Ajax操作 ASP.net中的json操作 二:用了自动代码生成器 1.Dal层的代码: publi ...

  2. JAVA EE 项目经常使用知识 之AJAX技术实现select下拉列表联动的两种使用方法(让你真正理解ajax)

    ajax 下拉列表联动的使用方法. ajax的定义: AJAX 是一种用于创建高速动态网页的技术. 通过在后台与server进行少量数据交换,AJAX 能够使网页实现异步更新.这意味着能够在不又一次载 ...

  3. JAVA EE 项目常用知识 之AJAX技术实现select下拉列表联动的两种用法(让你真正理解ajax)

    ajax 下拉列表联动的用法. ajax的定义: AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的 ...

  4. 无废话ExtJs 入门教程十二[下拉列表联动:Combobox_Two]

    无废话ExtJs 入门教程十二[下拉列表联动:Combobox_Two] extjs技术交流,欢迎加群(201926085) 不管是几级下拉列表的联动实现本质上都是根据某个下拉列表的变化,去动态加载其 ...

  5. 下拉列表联动显示(Car表) 三级联动

    .Models namespace 下拉列表联动显示_Car表_.Models { public class ProductorBF { private MyDBDataContext _contex ...

  6. 基于Mvc3,Ef,领域驱动电子商务系统的EShop开发

    分享自己从代码小工一步步走向搭架子,ING... 简单了解UnitOfWork 摘要: UnitOfWorkUnit Of Work模式,即工作单元,它是一种数据访问模式.它是用来维护一个由已经被业务 ...

  7. 中国省市区地址三级联动jQuery插件 案例下载

    中国省市区地址三级联动jQuery插件 案例下载 distpicker 是一款可以实现中国省市区地址三级联动jQuery插件.它使用简单,简单设置即可完成中国省市区地址联动效果. 安装 可以通过npm ...

  8. 10分钟学会基于ASP.NET的 JQuery实例 (转)

    本文介绍如何在ASP.NET(ASP.NET/AJAX)里使用基于JQuery的AJAX技术.(源代码下载见最后) 在使用JQuery前,请到www.jquery.com下载最新版本的js代码,然后再 ...

  9. 基于HTML5 Canvas和jQuery 的绘图工具的实现

    简单介绍 HTML5 提供了强大的Canvas元素.使用Canvas并结合Javascript 能够实现一些很强大的功能.本文就介绍一下基于HTML5 Canvas 的绘图工具的实现.废话少说,先看成 ...

随机推荐

  1. 【Cocos2d-X游戏实战开发】捕鱼达人之单例对象的设计(二)

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为cocos2d-x-2.1.5)    博主发现前两个系列的学习教程被严重抄袭,在这里呼吁大家请尊重开发者的劳动成果, 转载的时候请务必注 ...

  2. 找工作笔试面试那些事儿(16)---linux相关知识点(1)

    linux这部分的知识倒不是笔试面试必考的内容,不过现在很多公司开发环境都在linux系统下,一些简单的知识还是需要了解一下的,笔试面试中万一碰到了,也不会措手不及.作为菜硕的我,又因为读研期间的项目 ...

  3. leetcode Sum Root to Leaf Numbers(所有路径之和)

    转载请注明来自souldak,微博:@evagle 观察题目给的返回值类型是int,可以断定这棵树的高度不会超过10,所以数据量其实是非常小的.那就直接dfs遍历这棵树,然后到叶子节点的时候将值加到最 ...

  4. XenCenter注册码一年申请

    http://deliver.citrix.com/go/citrix/xenserver_activation?transactionID=2f65d2f134bf485d871291a566d67 ...

  5. PySide——Python图形化界面

    PySide——Python图形化界面 PySide——Python图形化界面入门教程(四) PySide——Python图形化界面入门教程(四) ——创建自己的信号槽 ——Creating Your ...

  6. linux 查看网络负载

    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 前面的 netstat -n是netstat的命令,windo ...

  7. Delphi接口的底层实现(接口在内存中仍然有其布局,它依附在对象的内存空间中,有汇编解释)——接口的内存结构图,简单清楚,深刻 good

    引言 接口是面向对象程序语言中一个很重要的元素,它被描述为一组服务的集合,对于客户端来说,我们关心的只是提供的服务,而不必关心服务是如何实现的:对于服务端的类来说,如果它想实现某种服务,实现与该服务相 ...

  8. C++环形矩阵填充实现

    #include<iostream> #include<iomanip> #include<cstdlib> #include<ctime> #incl ...

  9. oracle 之 内存—鞭辟近里(一)

    oracle 之 内存—鞭辟近里(一) 今天是2013-07-8日,这几天一直都在寻找一本深入研究oracle内存的书籍,期间一波三折弄的自己神魂颠倒,但是还是被我拿下了,感谢支持我的朋友,这周打算把 ...

  10. Hive Metastore ObjectStore PersistenceManager自动关闭bug解析

    最近在测试HCatalog,由于Hcatalog本身就是一个独立JAR包,虽然它也可以运行service,但是其实这个service就是metastore thrift server,我们在写基于Hc ...