父级ID可以为空以两个编号为一级 可以添加到第四级

table 字段有ID、 name 、parentNode、 childNode等基本属性  selecet  parentNode  ,len(childNode)/2 as level,...... from table

<table id="tableList">  </table> id列表显示属性HTML省略

html:

<divid="dialog-form"title="新增|修改"style="display: none;"><pclass="validateTips"></p><labelfor="parentNode"style="float: left">父级栏目:</label><selectid="SelectNode"style="height: 22px"><optionvalue="-1">请选择</option></select><selectid="SelectNode2"style="height: 22px"><optionvalue="-1">请选择</option></select><selectid="SelectNode3"style="height: 22px"><optionvalue="-1">请选择</option></select><p></p><p></p><labelfor="nodecode"style="float: left">栏目编号:</label><inputtype="text"name="nodecode1"id="nodecode1"style="width: 72px; background-color: #cacaca;"maxlength="2"readonly="readonly" /><%--一级栏目编号--%><inputtype="text"name="nodecode2"id="nodecode2"style="width: 72px;"maxlength="2"onkeyup="lengthLimit(this)"    /><%--二级栏目编号--%><p></p><labelfor="menuName"style="float: left">栏目名称:</label><inputtype="text"name="menuName"id="menuName"maxlength="20"onkeyup="checkNull(this)"style="width: 200px" /><p></p>   <labelfor="icoUrl"style="float: left">栏目图标:</label><div><divid="J_imageView"style="margin-left: 50px"><imgalt=""id="img_rs_stu"style="width: 32px; height: 32px"src="" /></div><divstyle="margin-left: 70px; margin-top: 5px; border-bottom: 5px"><inputtype="button"id="uploadButton"value="上传"style="height: 50px; width: 110px;float: left;" /></div></div><p></p></div><divclass="ctent"><inputtype="button"id="create-menu"value="新增栏目" /></div>

View Code

js:

js<script type="text/javascript">var iType = 0;//新增栏目操作$("#create-menu").button().click(function() {BindChange();IniteDropDown([]);tag= "add";$("#dialog-form").dialog("open");$.post("/ashx/menusHandler.ashx", { fun: 'getMaxNum', type: iType }, function(data, status) {$('#num').attr("disabled", "disabled")$("#num").val(data);});});});//初始化下拉框functionIniteDropDown(c) {//清除$("#SelectNode > option[value!='-1']").remove();$("#SelectNode2 > option[value!='-1']").remove();$("#SelectNode3 > option[value!='-1']").remove();//加载下拉框数据 一级二级三级栏目联动
IniteSelect({ids: ['SelectNode', 'SelectNode2', 'SelectNode3'],swType: ['GetCloumn', 'GetCloumn', 'GetCloumn'], BaseUrl: '/ashx/DropDownControl.ashx?aktype=' +iType,callBack: c});}//栏目下拉选择节点名称值赋给文本框 获取 父节点的栏目名称编号//change 选项注册事件 根据下拉后赋值给控件functionBindChange() {$("#SelectNode").change(function () { //当第一个下拉列表变动内容时第二个下拉列表将会显示var temp = $(this).val();if (temp == '-1') temp = ''; //选项为-1时 文本值为空$("#nodecode1").val(temp)//当第一个下拉列表变动内容时栏目编号显示父级编号
});//二级下拉框事件$("#SelectNode2").change(function() {var temp = $(this).val();if (temp == '-1') temp = $('#SelectNode').val();//显示父节点编号if (temp == '-1') temp = ''; //文本值编号为空$("#nodecode1").val(temp)});//三级下拉框事件$("#SelectNode3").change(function() {var temp = $(this).val();if (temp == '-1') temp = $('#SelectNode2').val();if (temp == '-1') temp = $('#SelectNode').val();if (temp == '-1') temp = '';$("#nodecode1").val(temp)});}//初始化加载数据获取列表信息functionGetData() {InitPager({PageId:"#paging",Url:"/ashx/menusHandler.ashx",Options: { fun:"list", type: iType }, CallBack:function(result) {$('#tbody').html('');$("#menuDemo").tmpl(result.Rows).appendTo("#tbody");returnresult.Total;}});}vartag, strGuid;var aaa = false;var imgurl = "";$(function() {GetData();$("#dialog-form").dialog({autoOpen:false,bgiframe:true,height:400,width:400,modal:true,buttons: {"保 存": function() {var bValid = true;var nodecode1 = $("#nodecode1").val(); //栏目一级编号var nodecode2 = $("#nodecode2").val(); //栏目二级编号var childnode = nodecode1 + nodecode2;  //子节点var menuname = $("#menuName").val();var icoUrl =imgurl;if (nodecode2=='' || nodecode2.length < 2) {bValid= false;updateTips("编号不能为空且长度不能小于两位!");}if (menuname =='') {bValid= false;updateTips("栏目名称必填!");}if(bValid) {$.post('/ashx/menusHandler.ashx', { fun: 'save', nodecode1: nodecode1, menuname: menuname, icoUrl: imgurl, type: iType, tag: tag, guid: strGuid, childnode: childnode },function(status) {if (status == "OK") {ReflashPager();alertmessage("操作提示", "信息保存成功!", null);}else{alertmessage("保存失败!编号不能与已存在编号相同!");}});$(this).dialog("close");}},"取 消": function() {$(this).dialog("close");}},open:function(event, ui) {//文件上传if (!aaa) {var K =KindEditor;var uploadbutton =K.uploadbutton({button: K('#uploadButton')[0],fieldName:'imgFile',url:'/ashx/FileUploadHandler.ashx?filetype=logo',afterUpload:function(data) {if (data.error === 0) {var url = K.formatUrl(data.url, 'absolute');var div = K('#J_imageView');div.html('');div.append('<img src="' + url + '" style="width: 32px; height: 32px;"/>');K('#url1').val(url);imgurl=url;}else{alert(data.message);}},afterError:function(str) {alert('自定义错误信息: ' +str);}});uploadbutton.fileBox.change(function(e) {uploadbutton.submit();});aaa= true;}},close:function() {$("#nodecode1").val('');$("#nodecode2").val('');$("#menuName").val('');$("#img_rs_stu").attr('src', '');$("#nodecode").removeAttr("disabled").css('background', '');RemoveChange();}});</script>

View Code

DropDownControl.ashx 代码:

 /// <summary>///获取栏目下拉/// </summary>/// <param name="form"></param>public voidGetCloumn(NameValueCollection form){//此处查询节点var pcode = form["guid"];var aktype = HttpContext.Current.Request.QueryString["aktype"];ak_menus bll= newak_menus();var tb = bll.GetMenus(pcode, aktype); //根据传递参数 获取数据信息操作了
SerializeResponse(tb,"name");}}public static void SerializeResponse(DataTable tb, stringname){List<DropDown> list = new List<DropDown>();foreach (DataRow row intb.Rows){DropDown at= newDropDown();at.Value= row["guid"].ToString();if (string.IsNullOrEmpty(name)){at.Text=row[name].ToString();}else{}list.Add(at);}AshxHelper.Write(list);}

View Code

FileUploadHandler.ashx 代码:

public override voidProcessRequest(HttpContext context){context.Response.ContentType= "text/plain";if(ValidateUser()){try{//文件所在文件夹路径:每次相关的文章或者广告名,附加路径var filedir = context.Request.QueryString["filedir"];//上传类别,根据类别获取配置文件var filetype = context.Request.QueryString["filetype"];string configUrl =XiuxiuUploadHelper.GetConfigURl(filetype);if (context.Request.Files.Count > 0){HttpPostedFile UploadFile= context.Request.Files["imgFile"];UploadFile= (UploadFile == null) ? context.Request.Files["mediaFile"] : UploadFile;if (UploadFile != null){//定义允许上传的文件扩展名ArrayList exts = new ArrayList() { "image", "flash", "media", "file"};//上传图片:上传文件后返回上传结果string dirName = context.Request.QueryString["dir"];if (string.IsNullOrEmpty(dirName)){dirName= "image";}if (!exts.Contains(dirName)){//不允许的上传类型showError(context, "不允许的上传的文件类型.");}//执行文件上传构造函数Ak_UploadHelper FupdHelper = new Ak_UploadHelper(context.Request.Files[0], configUrl, filedir);//执行文件上传string FileURLOfServer =FupdHelper.UploadFileFromHtpostfile();if (!string.IsNullOrEmpty(FileURLOfServer) &&FileURLOfServer.Equals(Ak_UploadHelper.UpLoadResult.SUCCESS.ToString())){Hashtable hash= newHashtable();hash["error"] = 0;hash["url"] =FupdHelper.CustomUploadPath;context.Response.AddHeader("Content-Type", "text/html; charset=UTF-8");AshxHelper.Write(hash);}else{showError(context, FileURLOfServer);}}}else{//保存秀秀上传图片 主要是头像var result =XiuxiuUploadHelper.SaveXiuxiuPhoto(context, configUrl, filedir);AshxHelper.Write(result);}}catch(Exception e){throw new Exception("上传文件失败!" +e);}}else{throw new Exception("当前用户无操作权限!");}}private void showError(HttpContext context, stringmessage){Hashtable hash= newHashtable();hash["error"] = 1;string UploadRsZh_CN =Ak_UploadHelper.GetUploadRsOfZh_CN(message);hash["message"] =UploadRsZh_CN;context.Response.AddHeader("Content-Type", "text/html; charset=UTF-8");AshxHelper.Write(hash);}}

View Code

menusHandler.ashx 代码:

public override voidProcessRequest(HttpContext context){context.Response.ContentType= "text/plain";if(ValidateUser()){StringBuilder strBuilder= newSystem.Text.StringBuilder();string strFun = context.Request.Form["fun"];switch(strFun){case "save":string strNodeCode = context.Request.Form["nodecode1"];string strMenuName = context.Request.Form["menuname"];string strUrl = context.Request.Form["menuurl"];string strType = context.Request.Form["type"];string strIco = context.Request.Form["icoUrl"];string tag = context.Request.Form["tag"];string strChildNode = context.Request.Form["childnode"];//子节点if (string.IsNullOrWhiteSpace(strMenuName) && strChildNode == null || strChildNode.Length < 2){AshxHelper.Write(false);break;}var result = false;if (tag == "add") //添加{   //判断名称是否为空
result=addMenu(strNodeCode, strMenuName, strUrl, strType, strIco, num, strChildNode, ispopular);}else{//修改string strguid = context.Request.Form["guid"];result=editMenu(strNodeCode, strMenuName, strUrl, strType, strIco, num, ispopular, strguid, strChildNode);}AshxHelper.Write(result);break;case "set":  //列表框信息设置string strGuid = context.Request.Form["guid"];string strState = context.Request.Form["akState"];if(setState(strGuid, strState))strBuilder.Append("success");elsestrBuilder.Append("error");context.Response.Write(strBuilder);break;case "model"://编辑修改操作获取信息string guid = context.Request.Form["guid"];context.Response.Write(getModel(guid));break;case "list"://获取列表信息初始加载数据
GetList(context.Request.Form);break;case "getMaxNum"://根据类型获取最大序列号值
getMaxNum(context.Request.Form);break;}}else{throw new Exception("当前用户无操作权限!");}}/// <summary>///根据类型获取最大序列号值/// </summary>/// <param name="form"></param>voidgetMaxNum(NameValueCollection form){int type = Convert.ToInt32(form["type"].ToString());int num = bll.getMaxNum(type);  //数据操作查询方法
AshxHelper.Write(num);}/// <summary>///获取数据列表信息/// </summary>/// <param name="form"></param>voidGetList(NameValueCollection form){var type = form["type"];var pageIndex = form["pageIndex"];var pageSize = form["pageSize"];var table = base.GetPagination("guid,lcon,name,url,akState,num,Lev","v_menus", "nodecode", out DoCount, string.Format("AND aktype = '{0}'", AnkeEdu.Tools.SqlEncodeHelper.EncodeSqlParam(type)));AshxHelper.Write(new { Total = DoCount, Rows =table });}/// <summary>///添加栏目/// </summary>/// <param name="strNode"></param>/// <param name="strName"></param>/// <param name="strUrl"></param>/// <returns></returns>private bool addMenu(string strNode, string strName, string strType, string strIco,  string strChildNode)//添加子节点strChildNode
{//检测是否重复if (!bll.IsRepeat(newGuid(), strChildNode)){AnkeEdu.Model.ak_menus model= newAnkeEdu.Model.ak_menus();model.guid=AnkeEdu.Tools.NewId.NewUpGuid();model.akState= 1;model.aktype=Convert.ToInt32(strType);model.name=strName;model.lcon=strIco;model.addTime=DateTime.Now;model.NodeCode= strChildNode;//赋值子节点model.ParentNode =strNode;return bll.Add(model); //添加操作数据信息
}return false;}/// <summary>///编辑修改/// </summary>/// <param name="strNode"></param>/// <param name="strName"></param>/// <param name="strIco"></param>/// <param name="guid"></param>/// <returns></returns>private bool editMenu(string strNode, string strName,  string strType, string strIco,  string guid,stringstrChildNode){var g = newGuid(guid);if (!bll.IsRepeat(g, strChildNode)) //检测是否重复
{Model.ak_menus model= newModel.ak_menus();model= bll.GetModel(g);//根据ID获得实体信息model.aktype =Convert.ToInt32(strType);model.name=strName;model.lcon=strIco;model.ParentNode=strNode;model.NodeCode=strChildNode;return bll.Update(model); //数据更新操作
}return false;}/// <summary>///根据ID获取信息/// </summary>/// <param name="guid"></param>/// <returns></returns>private string getModel(stringguid){return JsonConvert.SerializeObject(bll.GetModel(new Guid(guid))); //数据操作构造函数}

View Code

效果图:

列表信息显示效果图

转载于:https://www.cnblogs.com/Warmsunshine/p/3573741.html

基于jQuery+ashx+.net实现三级栏目联动操作相关推荐

  1. 基于jQuery的AJAX实现三级联动菜单

    最近学习jQuery,所以就写了一个关于中国省市县/区的三级联动菜单,权当相互学习,相互促进,特此记录. 下面是嵌套js的html文件: <!DOCTYPE html> <html ...

  2. 完整,详细的基于jquery省市三级联动和基于angular的省市三级联动对比

    前几天遇到需要输入地址的一个项目,里面就会有全国各个省市县的选择. 对于全国省市县的选择,难点在于全国省市县的数据资源.而具体的操作并不是很难. 本来我想免费发送资源的,可是csdn,这最少也需要1积 ...

  3. ajax实现多级联动菜单,jquery 实现二级/三级/多级联动菜单的思路及代码

    本文介绍使用jquery的AJAX功能和asp.net来实现省市区的三级联动效果,其他二级.三级或多级联动也可以按照此方法完成. 文章中涉及到的数据表为City,为方便管理. 设计此表如下 ID:自增 ...

  4. 【分享】纯js的n级联动列表框 —— 基于jQuery,支持下拉列表框和列表框,最重要的是n级,当然还有更重要的...

    多个列表框联动,不算是啥大问题,但是却挺麻烦,那么怎么才能够尽量方便一点呢?网上搜了一下,没发现太好用的,于是就自己写了一个.基于jQuery,无限级联动,支持下拉列表框和列表框. 先说一下步骤和使用 ...

  5. 基于vue实现精妙绝伦的三级联动

    基于vue实现精妙绝伦的三级联动 ps:笔者为初学者,自己想的不容易,别喷我 <template><view class="index"><!-- 三 ...

  6. JQuery+JSON的省市区三级联动效果

    html中只要简单的添加以下代码 <p>三级联动</p> <div id="city_4"><select class="pro ...

  7. h5仿android 京东三级联动,jquery仿京东商城三级联动代码插件

    2019-3-1更新:location.js文件里第三级县之前使用京东旧域名d.360buy.com的jsonp数据,域名做了跳转首页所以第三加载不出来.现在已经更新为d.jd.com,正常加载.不过 ...

  8. JQuery+ajax实现省市区三级联动(附:补充代码内容)

    省市区三级联动的实现(附:补充代码) 有了下面的代码,别忘了导入需要的jar包,用到的jar包到网上都能找到. 如果觉得不错,就点个赞!谢谢观望!! ##  1.效果图 ##  2.jsp页面,nov ...

  9. 基于jQuery垂直多级导航菜单代码

    基于jQuery垂直多级导航菜单代码是一款黑色风格的jQuery竖直导航菜单特效下载.效果图如下: 在线预览    源码下载 实现的代码. html代码: <ul class="ce& ...

最新文章

  1. 我们网管不能自己贬低自己
  2. BAT 批处理脚本教程
  3. 用py2exe打包成一个exe文件
  4. JMX和Spring –第1部分
  5. cmd编译可以通过执行没有结果_Go语言是如何完成编译的
  6. html如何太假icon图标,CSS3 icon font完全指南(CSS3 font 会取代icon图标)
  7. 个人博客四|注册登录退出功能后台开发
  8. 【测试】模拟一个全表扫描的sql,对其进行优化走索引,并且将执行计划稳定到baseLine。...
  9. unity案例 mysql lua_通过Xlua实现unity热更新的一个小例子
  10. UI设计素材|图标在UI设计界面当中起到什么作用
  11. 前端算法-基本排序算法比较
  12. Breakpad Native异常捕获
  13. 神马是敏捷?(3)——敏捷在中国的水土不服
  14. ps4手柄android ppsspp,求助,ppsspp模拟器能用ps4手柄吗
  15. 教你如何用PQ魔法师调整硬盘分区大小【图解教程】
  16. VMware网络NAT模式无法连接解决方法
  17. Dubious Document
  18. 名帖370 赵孟頫《真草千字文》
  19. usnews美国大学计算机排名2021,2021年USNEWS美国大学计算机
  20. 流落在帝都的 80 后北漂们的未来在哪儿?

热门文章

  1. 存储本地_项目实战之本地存储篇
  2. c语言输入身高计算标准体重_女人身高165cm标准体重是多少?
  3. 度量相似性的一些指标/函数
  4. 单例模式(全局地提供了一个类的唯一对象,该类的对象只创建一次,避免了创建类对象的开销)
  5. python dry原则_python使用建议与技巧分享(一)
  6. linux vg 镜像,Linux下载_Linux系统各种版本ISO镜像下载(redhat,centos,oracle,ubuntu,openSUSE)...
  7. Ansible 基础-介绍
  8. macOS配置Apache服务器
  9. 你的项目真的需要Session吗? redis保存session性能怎么样?
  10. mac easy_install 安装插件失败