---恢复内容开始---

第一次发表博文,发表博文的目的是巩固自己的技术,也能够共享给大家。写的不好的地方,希望大家多给给意见。老司机勿喷

数据结构()

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的无限级联动的更多相关文章

  1. ASP.NET MVC 实现AJAX跨域请求方法《1》

    ASP.NET MVC 实现AJAX跨域请求的两种方法 通常发送AJAX请求都是在本域内完成的,也就是向本域内的某个URL发送请求,完成部分页面的刷新.但有的时候需要向其它域发送AJAX请求,完成数据 ...

  2. [代码示例]用Fine Uploader+ASP.NET MVC实现ajax文件上传

    原文 [代码示例]用Fine Uploader+ASP.NET MVC实现ajax文件上传 Fine Uploader(http://fineuploader.com/)是一个实现 ajax 上传文件 ...

  3. Asp.Net MVC 使用 Ajax

    Asp.Net MVC 使用 Ajax Ajax 简单来说Ajax是一个无需重新加载整个网页的情况下,可以更新局部页面或数据的技术(异步的发送接收数据,不会干扰当前页面). Ajax工作原理 Ajax ...

  4. Asp.Net MVC Unobtrusive Ajax

    1.   Unobtrusive JavaScript介绍 说到Unobtrusive Ajax,就要谈谈UnobtrusiveJavaScript了,所谓Unobtrusive JavaScript ...

  5. ASP.NET MVC之Ajax如影随行

    一.Ajax的前世今生 我一直觉得google是一家牛逼的公司,为什么这样说呢?<舌尖上的中国>大家都看了,那些美食估计你是百看不厌,但是里边我觉得其实也有这样的一个哲学:关于食材,对于种 ...

  6. ASP.NET MVC 实现 AJAX 跨域请求

    ASP.NET MVC 实现AJAX跨域请求的两种方法 和大家分享下Ajax 跨域的经验,之前也找了好多资料,但是都不行,后来看到个可行的修改了并测试下 果然OK了   希望对大家有所帮助! 通常发送 ...

  7. 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 ...

  8. asp.net mvc 使用ajax请求 控制器 (PartialViewResult)分部的action,得到一个分部视图(PartialView)的HTML,进行渲染

    在asp.net mvc 使用ajax请求获取数据的时候,我们一般是返回json或者xml,然后解析这些数据进行渲染,这样会比较麻烦,可以请求一个 分部action,返回一个分部视图 直接可以渲染,不 ...

  9. 在Asp.Net MVC中用Ajax回调后台方法

    在Asp.Net MVC中用Ajax回调后台方法基本格式: var operData = ...; //传递的参数(action中定义的) var type = ...; //传递的参数(action ...

随机推荐

  1. 在Ubuntu下搭建ASP.NET 5开发环境

    在Ubuntu下搭建ASP.NET 5开发环境 0x00 写在前面的废话 年底这段时间实在太忙了,各种事情都凑在这个时候,没时间去学习自己感兴趣的东西,所以博客也好就没写了.最近工作上有个小功能要做成 ...

  2. TODO:即将开发的第一个小程序

    TODO:即将开发的第一个小程序 微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验.个人理解小程序是寄宿在微信平台上的一个前端框架,具有跨平台功能, ...

  3. 学习ASP.NET Core,怎能不了解请求处理管道[1]: 中间件究竟是个什么东西?

    ASP.NET Core管道虽然在结构组成上显得非常简单,但是在具体实现上却涉及到太多的对象,所以我们在 "通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流 ...

  4. JavaScript动画-碰撞检测

    ▓▓▓▓▓▓ 大致介绍 碰撞检测是指在页面中有多个元素时,拖拽一个元素会出现碰撞问题,碰撞检测是以模拟拖拽和磁性吸附中的范围限定为基础的 效果:碰撞检测 ▓▓▓▓▓▓ 碰撞检测 先来看看碰撞检测的原理 ...

  5. 在Windows上编译和调试CoreCLR

    生成CoreCLR - Windows篇 本文的唯一目的就是让你运行Hello World 运行环境 Window 7+ Visual studio 2015 确保C++ 工具已经被安装,默认是不安装 ...

  6. CSS 3 学习——渐变

    通过CSS渐变创建的是一个没有固定比例和固定尺寸的<image>类型,也就是说是一张图片,这张图片的尺寸由所应用的元素的相关信息决定.凡是支持图片类型的CSS属性都可以设置渐变,而支持颜色 ...

  7. 【干货分享】流程DEMO-人员调动流程

    流程名: 调动 流程相关文件: 流程包.xml 流程说明: 直接导入流程包文件,即可使用本流程 表单:  流程:  图片:3.png DEMO包下载: http://files.cnblogs.com ...

  8. 安装并使用PHPunit

    安装并使用PHPunit Linux 下安装PHPunit PHP 档案包 (PHAR)  要获取 PHPUnit,最简单的方法是下载 PHPUnit 的 PHP 档案包 (PHAR),它将 PHPU ...

  9. IIS启动失败,启动Windows Process Activation Service时,出现错误13:数据无效 ;HTTP 错误 401.2 - Unauthorized 由于身份验证头无效,您无权查看此页

    因为修改过管理员账号的密码后重启服务器导致IIS无法启动,出现已下异常 1.解决:"启动Windows Process Activation Service时,出现错误13:数据无效&quo ...

  10. 基于select的python聊天室程序

    python网络编程具体参考<python select网络编程详细介绍>. 在python中,select函数是一个对底层操作系统的直接访问的接口.它用来监控sockets.files和 ...