基于MVC3方式实现下拉列表联动(JQuery)


Posted in Javascript onSeptember 02, 2013

上次项目中遇到一个需要多个下拉列表联动的操作,今天有空将实现方式整理以便以后参考。
要达到的效果是,点击一个下拉框,则另一个下拉框的值发生对应变化。如:选择中国,则另个一下拉框里显示中国各个省份。
传统的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。
如有大家对上述说法有异议或者更好的实现方案,请给予指正或说明,谢谢。
Javascript 相关文章推荐
学习ExtJS(一) 之基础前提
Oct 07 Javascript
jQuery 学习第七课 扩展jQuery的功能 插件开发
May 17 Javascript
javascript移出节点removeChild()使用介绍
Apr 03 Javascript
Javascript无参数和有参数类继承问题解决方法
Mar 02 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
Aug 13 Javascript
jQuery实现下拉框左右移动(全部移动,已选移动)
Apr 15 Javascript
angular仿支付宝密码框输入效果
Mar 25 Javascript
深入理解ES6的迭代器与生成器
Aug 19 Javascript
jquery animate动画持续运动的实例
Nov 29 jQuery
vue组件的写法汇总
Apr 12 Javascript
JavaScript实现星级评价效果
May 17 Javascript
JS实现京东商品分类侧边栏
Dec 11 Javascript
javascript模块化是什么及其优缺点介绍
Sep 02 #Javascript
火狐下table中创建form导致两个table之间出现空白
Sep 02 #Javascript
js的alert弹出框出现乱码解决方案
Sep 02 #Javascript
javascript中的window.location.search方法简介
Sep 02 #Javascript
js Math 对象的方法
Sep 01 #Javascript
javascript ready和load事件的区别示例介绍
Aug 30 #Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
Aug 30 #Javascript
You might like
全国FM电台频率大全 - 20 广西省
2020/03/11 无线电
twig里使用js变量的方法
2016/02/05 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
PHP+redis实现的悲观锁机制示例
2018/06/12 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
js加解密 脚本解密
2008/02/22 Javascript
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
2014/06/06 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
Nodejs关于gzip/deflate压缩详解
2015/03/04 NodeJs
js窗口关闭提示信息(兼容IE和firefox)
2015/10/23 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
vue 2.8.2版本配置刚进入时候的默认页面方法
2018/09/21 Javascript
angularJs在多个控制器中共享服务数据的方法
2018/09/30 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
微信小程序实现页面浮动导航
2019/01/28 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
Python中使用hashlib模块处理算法的教程
2015/04/28 Python
Python中扩展包的安装方法详解
2017/06/14 Python
python matplotlib中文显示参数设置解析
2017/12/15 Python
python中subprocess批量执行linux命令
2018/04/27 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
用Python爬取QQ音乐评论并制成词云图的实例
2019/08/24 Python
python返回数组的索引实例
2019/11/28 Python
HTML5中Localstorage的使用教程
2015/07/09 HTML / CSS
如何高效率的查找一个月以内的数据
2012/04/15 面试题
北京鼎普科技股份有限公司软件测试面试题
2012/04/07 面试题
出纳会计岗位职责
2014/03/12 职场文书
公务员群众路线心得体会
2014/11/03 职场文书
顶岗实习协议书
2015/01/29 职场文书
Python基础之元编程知识总结
2021/05/23 Python
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android