基于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 相关文章推荐
在网页中控制wmplayer播放器
Jul 01 Javascript
11款基于Javascript的文件管理器
Oct 25 Javascript
js判断当前页面在移动设备还是在PC端中打开
Jan 06 Javascript
JavaScript鼠标事件,点击鼠标右键,弹出div的简单实例
Aug 03 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
Mar 05 Javascript
js中的触发事件对象event.srcElement与event.target详解
Mar 15 Javascript
ionic2懒加载配置详解
Sep 01 Javascript
全面分析JavaScript 继承
May 30 Javascript
JS实现水平移动与垂直移动动画
Dec 19 Javascript
Vue-router 报错NavigationDuplicated的解决方法
Mar 31 Javascript
Vue 自适应高度表格的实现方法
May 13 Javascript
JavaScript实现前端倒计时效果
Feb 09 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的中问验证码
2006/11/25 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
2012/05/07 PHP
Codeigniter注册登录代码示例
2014/06/12 PHP
jQuery中after的两种用法实例
2013/07/03 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
JavaScript获取图片的原始尺寸以宽度为例
2014/05/04 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
2015/06/12 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
javascript实现自动输出文本(打字特效)
2015/08/27 Javascript
基于jQuery实现的扇形定时器附源码下载
2015/10/20 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
jQuery操作css样式
2017/05/15 jQuery
Angular6新特性之Angular Material
2018/12/28 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
JS桶排序的简单理解与实现方法示例
2019/11/25 Javascript
理解Python中的With语句
2016/03/18 Python
《与孩子一起学编程》python自测题
2018/05/27 Python
python 爬取古诗文存入mysql数据库的方法
2020/01/08 Python
一款纯css3实现的竖形二级导航的实例教程
2014/12/11 HTML / CSS
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
美国旅游网站:Tours4Fun
2017/02/17 全球购物
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
财务科科长岗位职责
2014/03/10 职场文书
捐款倡议书
2014/04/14 职场文书
小学作文评语大全
2014/04/21 职场文书
公司承诺书范文
2014/05/19 职场文书
语文教育专业求职信
2014/06/28 职场文书
2014领导班子“四风问题”对照检查材料思想汇报(执法局)
2014/09/21 职场文书
无房产证房屋转让协议书合同样本
2014/10/18 职场文书
党的群众路线教育实践活动督导组工作情况汇报
2014/10/28 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
中国汉字听写大会观后感
2015/06/02 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
tensorflow中的数据类型dtype用法说明
2021/05/26 Python
Python实现双向链表基本操作
2022/05/25 Python