基于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 相关文章推荐
用javascript获得地址栏参数的两种方法
Nov 08 Javascript
学习ExtJS 访问容器对象
Oct 07 Javascript
Moment.js 不容错过的超棒Javascript日期处理类库
Apr 15 Javascript
ScrollDown的基本操作示例
Jun 09 Javascript
jQuery中toggleClass()方法用法实例
Jan 05 Javascript
jquery 根据name名获取元素的value值
Feb 27 Javascript
分享javascript计算时间差的示例代码
Mar 19 Javascript
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
Nov 02 Javascript
Angular 5.x 学习笔记之Router(路由)应用
Apr 08 Javascript
vue移动端实现下拉刷新
Apr 22 Javascript
最简单的JS实现json转csv的方法
Jan 10 Javascript
JavaScript 作用域实例分析
Oct 02 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调用三种数据库的方法(3)
2006/10/09 PHP
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
深入php中var_dump方法的使用详解
2013/06/24 PHP
PHP文件缓存smarty模板应用实例分析
2016/02/26 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
JavaScript 获取当前时间戳的代码
2010/08/05 Javascript
三级下拉菜单的js实现代码
2011/05/23 Javascript
js导出table到excel同时兼容FF和IE示例
2013/09/03 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
jQuery实现弹出窗口弹出div层的实例代码
2017/01/09 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
浅谈webpack SplitChunksPlugin实用指南
2018/09/17 Javascript
详解Vue CLI 3.0脚手架如何mock数据
2018/11/23 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
2018/12/10 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
vue-router定义元信息meta操作
2020/12/07 Vue.js
python获取外网IP并发邮件的实现方法
2017/10/01 Python
python使用KNN算法手写体识别
2018/02/01 Python
Python实现爬虫抓取与读写、追加到excel文件操作示例
2018/06/27 Python
Python Learning 列表的更多操作及示例代码
2018/08/22 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
python实现两个文件夹的同步
2019/08/29 Python
python之yield和Generator深入解析
2019/09/18 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
python和C++共享内存传输图像的示例
2020/10/27 Python
为什么要有struct关键字
2012/05/08 面试题
经典c++面试题二
2015/08/14 面试题
初中体育教学反思
2014/01/14 职场文书
中学生学雷锋活动心得体会
2014/03/10 职场文书
经典的毕业生自荐信范文
2014/04/14 职场文书
2014最新版群众路线四风整改措施
2014/09/24 职场文书
员工离职感谢信
2015/01/22 职场文书
保险内勤岗位职责
2015/04/13 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫
使用Python获取字典键对应值的方法
2022/04/26 Python