基于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 相关文章推荐
js特殊字符过滤的示例代码
Mar 05 Javascript
javascript制作2048游戏
Mar 30 Javascript
js模糊查询实例分享
Dec 26 Javascript
Javascript设计模式之装饰者模式详解篇
Jan 17 Javascript
JS ES6多行字符串与连接字符串的表示方法
Apr 26 Javascript
详解基于angular-cli配置代理解决跨域请求问题
Jul 05 Javascript
Vue keep-alive实践总结(推荐)
Aug 31 Javascript
Vue项目全局配置微信分享思路详解
May 04 Javascript
解决layui 复选框等内置控件不显示的问题
Aug 14 Javascript
js实现带箭头的进度流程
Mar 26 Javascript
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
uniapp引入支付宝原生扫码插件步骤详解
Jul 23 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
php模板函数 正则实现代码
2012/10/15 PHP
深入PHP与浏览器缓存的分析
2013/06/03 PHP
yii的CURD操作实例详解
2014/12/04 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
php编写的抽奖程序中奖概率算法
2015/05/14 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
实用javaScript技术-屏蔽类
2006/08/15 Javascript
javaScript如何生成xmlhttp
2013/12/16 Javascript
javascript修改图片src的方法
2015/01/27 Javascript
angularjs学习笔记之完整的项目结构
2015/09/26 Javascript
基于jquery实现日历签到功能
2020/09/11 Javascript
详解AngularJS控制器的使用
2016/03/09 Javascript
[02:39]DOTA2英雄基础教程 极限穿梭编织者
2013/12/05 DOTA
用Python操作字符串之rindex()方法的使用
2015/05/19 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
selenium+python实现1688网站验证码图片的截取功能
2018/08/14 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
对Python使用mfcc的两种方式详解
2019/01/09 Python
如何使用Python自动控制windows桌面
2019/07/11 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
python求质数列表的例子
2019/11/24 Python
解决python web项目意外关闭,但占用端口的问题
2019/12/17 Python
html5绘制时钟动画
2014/12/15 HTML / CSS
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
CAT鞋美国官网:CAT Footwear
2017/11/27 全球购物
EJB3推出JPA的原因
2013/10/16 面试题
大学生会计职业生涯规划范文
2014/02/28 职场文书
书法大赛策划方案
2014/06/04 职场文书
民族学专业求职信
2014/07/28 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
干部作风整顿个人剖析材料
2014/10/06 职场文书
黄石寨导游词
2015/02/05 职场文书
2019年工作总结范文
2019/05/21 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
Redis分布式锁Redlock的实现
2021/08/07 Redis