基于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实现随机返回数组的一个元素
Aug 13 Javascript
基于jquery的网页SELECT下拉框美化代码
Oct 28 Javascript
juqery 学习之三 选择器 层级 基本
Nov 25 Javascript
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
Dec 28 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
Sep 09 Javascript
js解决select下拉选不中问题
Oct 14 Javascript
js操作DOM--添加、删除节点的简单实例
Jul 08 Javascript
微信小程序中吸底按钮适配iPhone X方案
Nov 29 Javascript
微信小程序实现鼠标拖动效果示例
Dec 01 Javascript
JS实现二维数组横纵列转置的方法
Apr 17 Javascript
javascript 数组精简技巧小结
Feb 26 Javascript
详解CocosCreator项目结构机制
Apr 14 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/10/09 PHP
php根据分类合并数组的方法实例详解
2013/11/06 PHP
快速保存网页中所有图片的方法
2006/06/23 Javascript
js模仿jquery的写法示例代码
2013/06/16 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
解决jquery版本冲突的有效方法
2014/09/02 Javascript
JavaScript判断textarea值是否为空并给出相应提示
2014/09/04 Javascript
javascript 数组操作详解
2015/01/29 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
Webwork 实现文件上传下载代码详解
2016/02/02 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
JSP基于Bootstrap分页显示实例解析
2016/06/12 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
2016/07/13 Javascript
Vue.js中数组变动的检测详解
2016/10/12 Javascript
浅谈js原生拖放
2016/11/21 Javascript
JQuery实现定时刷新功能代码
2017/05/09 jQuery
JS原型与继承操作示例
2019/05/09 Javascript
vue 判断页面是首次进入还是再次刷新的实例
2020/11/05 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
Python深入学习之对象的属性
2014/08/31 Python
python相似模块用例
2016/03/04 Python
利用python库在局域网内传输文件的方法
2018/06/04 Python
python pandas库中DataFrame对行和列的操作实例讲解
2018/06/09 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
python运用pygame库实现双人弹球小游戏
2019/11/25 Python
使用pandas的box_plot去除异常值
2019/12/10 Python
详解vscode实现远程linux服务器上Python开发
2020/11/10 Python
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
计算机相关的自我评价
2014/01/15 职场文书
优秀护士获奖感言
2014/02/20 职场文书
城管个人总结
2015/02/28 职场文书
歌剧魅影观后感
2015/06/05 职场文书
python process模块的使用简介
2021/05/14 Python
图解排序算法之希尔排序Java实现
2021/06/26 Java/Android
POST提交数据常见的四种方式
2022/01/18 HTML / CSS
德生2P3收音机开箱评测
2022/04/30 无线电