基于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 相关文章推荐
jquery隐藏标签和显示标签的实例
Nov 11 Javascript
深入理解javascript中的立即执行函数(function(){…})()
Jun 12 Javascript
jQuery+css3实现文字跟随鼠标的上下抖动
Jul 31 Javascript
js事件驱动机制 浏览器兼容处理方法
Jul 23 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
Aug 10 Javascript
js实现简单的计算器功能
Jan 16 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
Jan 23 Javascript
JS块级作用域和私有变量实例分析
May 11 Javascript
Vuex的API文档说明详解
Feb 05 Javascript
js和jquery判断数据类型的4种方法总结
Aug 28 jQuery
原生js 实现表单验证功能
Feb 08 Javascript
vue-cli中实现响应式布局的方法
Mar 02 Vue.js
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调用Webservice实例代码
2011/07/29 PHP
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
PHP中模拟处理HTTP PUT请求的例子
2014/07/22 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
JSON 客户端和服务器端的格式转换
2009/08/27 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
2016/09/08 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
2017/06/09 jQuery
backbone简介_动力节点Java学院整理
2017/07/14 Javascript
JS实现留言板功能[楼层效果展示]
2017/12/27 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
jQuery实现简单日历效果
2020/07/05 jQuery
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
Python可跨平台实现获取按键的方法
2015/03/05 Python
python算法演练_One Rule 算法(详解)
2017/05/17 Python
PyQt5每天必学之事件与信号
2018/04/20 Python
使用anaconda的pip安装第三方python包的操作步骤
2018/06/11 Python
python实现自动网页截图并裁剪图片
2018/07/30 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
俄罗斯游戏商店:Buka
2020/03/01 全球购物
毕业生医学检验求职信
2013/10/16 职场文书
皮肤科医师岗位职责
2013/12/04 职场文书
业务部门经理岗位职责
2014/02/23 职场文书
纪念九一八事变演讲稿:勿忘国耻
2014/09/14 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS
nginx共享内存的机制详解
2022/03/21 Servers
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js