基于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 使用手册(五)
Sep 23 Javascript
jquery实现input输入框实时输入触发事件代码
Jan 28 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
May 04 Javascript
Jquery对select的增、删、改、查操作
Feb 06 Javascript
基于Css3和JQuery实现打字机效果
Aug 11 Javascript
jQuery实现立体式数字滚动条增加效果
Dec 21 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
Jan 11 Javascript
史上最全JavaScript常用的简写技巧(推荐)
Aug 17 Javascript
原生js实现公告滚动效果
Jan 10 Javascript
Vue实现滑动拼图验证码功能
Sep 15 Javascript
在JavaScript中实现链式调用的实现
Dec 24 Javascript
vue实现五子棋游戏
May 28 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实现比较两个字符串日期大小的方法
2015/05/12 PHP
phpcms的分类名称和类别名称的调用
2017/01/05 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
2019/12/12 PHP
javascript两段代码,两个小技巧
2010/02/04 Javascript
jQuery lazyload 的重复加载错误以及修复方法
2010/11/19 Javascript
基于jQuery的获得各种控件Value的方法
2010/11/19 Javascript
js中substring和substr的详细介绍与用法
2013/08/29 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
JavaScript实现彩虹文字效果的方法
2015/04/16 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
2015/12/08 Javascript
Javascript农历与公历相互转换的简单实例
2016/10/09 Javascript
js 去掉字符串前后空格实现代码集合
2017/03/25 Javascript
easyui简介_动力节点Java学院整理
2017/07/14 Javascript
vue中mint-ui的使用方法
2018/04/04 Javascript
JavaScript实现指定数量的并发限制的示例代码
2020/03/10 Javascript
vue中父子组件的参数传递和应用示例
2021/01/04 Vue.js
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
Python中优化NumPy包使用性能的教程
2015/04/23 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
快速查找Python安装路径方法
2020/02/06 Python
关于matplotlib-legend 位置属性 loc 使用说明
2020/05/16 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
2020/10/21 Python
CSS Grid布局教程之浏览器开启CSS Grid Layout汇总
2014/12/30 HTML / CSS
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
法雷奥SQA(electric)面试问题
2016/01/23 面试题
集体婚礼策划方案
2014/02/22 职场文书
保护环境的建议书
2014/03/12 职场文书
励志广播稿300字(5篇)
2014/09/15 职场文书
行为习惯主题班会
2015/08/14 职场文书