ASP.NET MVC关于Ajax以及Jquery的无限级联动
---恢复内容开始---
第一次发表博文,发表博文的目的是巩固自己的技术,也能够共享给大家。写的不好的地方,希望大家多给给意见。老司机勿喷
数据结构()
NewsTypeId 新闻ID,
NewsTypeName 新闻名称
NewsTypeParentId 父级ID
后台语言:ASP.NET MVC4
后台代码:
/// <summary>
/// JSON格式的List集合
/// </summary>
/// <returns></returns>
public JsonResult FnNewsTypeList()
{
int NewsTypeParentId = -1;
if (!string.IsNullOrEmpty(Request["NewsTypeParentId"]))
{
NewsTypeParentId = Convert.ToInt32(Request["NewsTypeParentId"]);
}
Maticsoft.BLL.NewsType NTbll = new Maticsoft.BLL.NewsType();
StringBuilder strWhere = new StringBuilder();
if (NewsTypeParentId != -1)
{
strWhere.AppendLine(" AND NewsTypeParentId ='" + NewsTypeParentId+"'");
}
List<Maticsoft.Model.NewsType> NTList = NTbll.NewsTypeList(strWhere.ToString());
return Json(NTList);
}
页面布局:
<div class="form-group ">
<label class="col-sm-3 control-label">所属类型:</label>
<div class="col-sm-8" id="cat">
<select id="NewsTypeParentId_0" onchange="FirstChange(0)" name="NewsTypeParentId" class="form-control" aria-describedby="firstname-error" aria-invalid="true">
<option value="0">请选择</option>
<option value="1">1</option>
</select>
</div>
</div>
Jquery语言:
Jquery代码:
//页面第一次加载时,将父级为最高级的类型读取出来
<script>
$(function () {
$.ajax({
type: "POST",
url: "/NewsType/FnNewsTypeList",
data: {
NewsTypeParentId: 0
},
dataType: "JSON",
success: function (data) {
var SelectArray = new Array();
SelectArray.push("<option value=\"0\">请选择</option>")
for (var i = 0; i < data.length; i++) {
//使用Array拼接Html页面
SelectArray.push("<option value=\"");
SelectArray.push(data[i].NewsTypeId);
SelectArray.push("\">");
SelectArray.push(data[i].NewsTypeName);
SelectArray.push("</option>");
}
//寻找最高级分类追加数据
var SelectDom = $("[name=NewsTypeParentId]:eq(0)")
SelectDom.find("option").remove()
//Array 的 join 方法,将所有的Html内容连接
SelectDom.append(SelectArray.join(""))
}
})
})
//下拉框发生改变触发的时间
ThisId 是当前所属Select的Id属性
ChildId 是当前Select的下一级的Select 的ID属性
FirstChange是当下拉框改变时执行的第一个事件
function FirstChange(ThisId) {
var ChildId= parseInt(ThisId) + 1;
SecondChange(ThisId, ChildId)
}
//SecondChange 是寻找被点击Select下的所有下N级Select,如果存在,则先移除所有下级Select
function SecondChange(ThisId, ChildId) {
$("#NewsTypeParentId_" + ThisId)
var ParentVal = $("#NewsTypeParentId_" + ThisId).val();
//while循环判断下一个select 是否存在,如存在则删除直到不存在为止
doChildId= ChildId;
do {
if ($("#NewsTypeParentId_" + doChildId).length > 0) {
$("#NewsTypeParentId_" + doChildId).remove();
doChildId++;
} else {
break;
}
} while (1)
if (ParentVal != '') {
//当被点击的Select值存在时,这时已将其下属的所有Select清楚,重新调用数据进行生成
NewsTypeParentId(ParentVal, ChildId);
}
}
//Ajax读取数据进行追加生成
function NewsTypeParentId(ParentVal, ChildId) {
if (ParentVal != 0) {
$.ajax({
type: "POST",
url: "/NewsType/FnNewsTypeList",
data: {
NewsTypeParentId: ParentVal
},
dataType: "JSON",
success: function (data) {
//返回值data是JSON格式,当data存在数据时,表示存在下级,进行数据处理和Html生成
//Select的ID属性值为NewsTypeParentId_? 从第一级开始,依次为0,1,2,3,4...
if (data.length > 0) {
var SelectArray = new Array();
SelectArray.push("");
SelectArray.push("<select id=\"NewsTypeParentId_");
SelectArray.push(ChildId);
SelectArray.push("\" onchange=\"FirstChange(");
SelectArray.push(ChildId);
SelectArray.push(")\" name=\"NewsTypeParentId\" class=\"form-control\" ");
SelectArray.push("aria-describedby=\"firstname-error\" aria-invalid=\"true\">");
SelectArray.push("<option value=\"0\">请选择</option> ")
for (var i = 0; i < data.length; i++) {
SelectArray.push("<option value=\"");
SelectArray.push(data[i].NewsTypeId);
SelectArray.push("\">");
SelectArray.push(data[i].NewsTypeName);
SelectArray.push("</option> ");
}
SelectArray.push("</select>");
//最后将此Select追加至DIV末端
$("#cat").append(SelectArray.join(""))
}
}
})
}
}
Jquery最后传参数添加数据时,做某些数据处理
//ParentVal是最后一级Select的值,当未选中任何项时,则选择上一级数据
var ParentVal = $("[name=NewsTypeParentId]:last").val();
if (ParentVal == 0) {
//寻找最后一个Select的索引
//将索引-1
var SelectIndex = $("[name=NewsTypeParentId]:last").index();
SelectIndex = SelectIndex - 1;
ParentVal = $("[name=NewsTypeParentId]:eq(" + SelectIndex + ")").val();
}
</script>
---恢复内容结束---
ASP.NET MVC关于Ajax以及Jquery的无限级联动的更多相关文章
- ASP.NET MVC 实现AJAX跨域请求方法《1》
ASP.NET MVC 实现AJAX跨域请求的两种方法 通常发送AJAX请求都是在本域内完成的,也就是向本域内的某个URL发送请求,完成部分页面的刷新.但有的时候需要向其它域发送AJAX请求,完成数据 ...
- [代码示例]用Fine Uploader+ASP.NET MVC实现ajax文件上传
原文 [代码示例]用Fine Uploader+ASP.NET MVC实现ajax文件上传 Fine Uploader(http://fineuploader.com/)是一个实现 ajax 上传文件 ...
- Asp.Net MVC 使用 Ajax
Asp.Net MVC 使用 Ajax Ajax 简单来说Ajax是一个无需重新加载整个网页的情况下,可以更新局部页面或数据的技术(异步的发送接收数据,不会干扰当前页面). Ajax工作原理 Ajax ...
- Asp.Net MVC Unobtrusive Ajax
1. Unobtrusive JavaScript介绍 说到Unobtrusive Ajax,就要谈谈UnobtrusiveJavaScript了,所谓Unobtrusive JavaScript ...
- ASP.NET MVC之Ajax如影随行
一.Ajax的前世今生 我一直觉得google是一家牛逼的公司,为什么这样说呢?<舌尖上的中国>大家都看了,那些美食估计你是百看不厌,但是里边我觉得其实也有这样的一个哲学:关于食材,对于种 ...
- ASP.NET MVC 实现 AJAX 跨域请求
ASP.NET MVC 实现AJAX跨域请求的两种方法 和大家分享下Ajax 跨域的经验,之前也找了好多资料,但是都不行,后来看到个可行的修改了并测试下 果然OK了 希望对大家有所帮助! 通常发送 ...
- ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则
ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...
- asp.net mvc 使用ajax请求 控制器 (PartialViewResult)分部的action,得到一个分部视图(PartialView)的HTML,进行渲染
在asp.net mvc 使用ajax请求获取数据的时候,我们一般是返回json或者xml,然后解析这些数据进行渲染,这样会比较麻烦,可以请求一个 分部action,返回一个分部视图 直接可以渲染,不 ...
- 在Asp.Net MVC中用Ajax回调后台方法
在Asp.Net MVC中用Ajax回调后台方法基本格式: var operData = ...; //传递的参数(action中定义的) var type = ...; //传递的参数(action ...
随机推荐
- dagger2系列之依赖方式dependencies、包含方式(从属方式)SubComponent
本篇是实战文章,从代码的角度分析这两种方式.本文参考自下列文章: http://www.jianshu.com/p/1d42d2e6f4a5 http://www.jianshu.com/p/94d4 ...
- ASP.NET Core 中文文档 第四章 MVC(4.6)Areas(区域)
原文:Areas 作者:Dhananjay Kumar 和 Rick Anderson 翻译:耿晓亮(Blue) 校对:许登洋(Seay) Areas 是 ASP.NET MVC 用来将相关功能组织成 ...
- .NET面试题集锦②(Part 二)
一.前言部分 文中的问题及答案多收集整理自网络,不保证100%准确,还望斟酌采纳. 1.实现产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复. ]; ArrayList my ...
- HTML 5 应用程序缓存manifest
什么是应用程序缓存(Application Cache)? HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问. 应用程序缓存为应用带来三个优势: 离线浏 ...
- Microsoft Visual Studio 2015 下载、注册、安装过程、功能列表、问题解决
PS:请看看回复.可能会有文章里没有提到的问题.也许会对你有帮助哦~ 先上一张最终的截图吧: VS2015正式版出了,虽然没有Ultimate旗舰版,不过也是好激动的说.哈哈.可能有的小伙伴,由于工作 ...
- Linux学习日记-EF6的安装升级(三)
在vs2013中使用EF是5的但是如果想使用 “来自数据库据的Code First” 这个生成模板就会发现 它会提示你EF的版本太低请升级 下面就是解决办法: 安装实体框架6 在工具菜单中,点击NuG ...
- 【腾讯Bugly干货分享】跨平台 ListView 性能优化
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/FbiSLPxFdGqJ00WgpJ94yw 导语 精 ...
- 架构之路(八)从CurrentUser说起
CurrentUser,也就是当前用户,这是我们系统中大量使用的一个概念. 确认当前用户 当然,我们利用的是cookie:用户的ID存放在cookie中,服务器端通过cookie中的Id,查找数据库, ...
- Google Java编程库Guava介绍
本系列想介绍下Java下开源的优秀编程库--Guava[ˈgwɑːvə].它包含了Google在Java项目中使用一些核心库,包含集合(Collections),缓存(Caching),并发编程库(C ...
- 跟我一起ggplot2(1)
ggplot2 R的作图工具包,可以使用非常简单的语句实现非常复杂漂亮的效果. qplot 加载qplot library(ggplot2) # 测试数据集,ggplot2内置的钻石数据 qplot( ...