基于jQuery+ashx+.net实现三级栏目联动操作
父级ID可以为空以两个编号为一级 可以添加到第四级
table 字段有ID、 name 、parentNode、 childNode等基本属性 selecet parentNode ,len(childNode)/2 as level,...... from table
<table id="tableList"> </table> id列表显示属性HTML省略
html:
<div id="dialog-form" title="新增|修改" style="display: none;">
<p class="validateTips">
</p>
<label for="parentNode" style="float: left">
父级栏目:</label>
<select id="SelectNode" style="height: 22px">
<option value="-1">请选择</option>
</select>
<select id="SelectNode2" style="height: 22px">
<option value="-1">请选择</option>
</select>
<select id="SelectNode3" style="height: 22px">
<option value="-1">请选择</option>
</select><p>
</p>
<p>
</p> <label for="nodecode" style="float: left">
栏目编号:</label>
<input type="text" name="nodecode1" id="nodecode1" style="width: 72px; background-color: #cacaca;"
maxlength="2" readonly="readonly" />
<%--一级栏目编号--%>
<input type="text" name="nodecode2" id="nodecode2" style="width: 72px;" maxlength="2"
onkeyup="lengthLimit(this)" />
<%--二级栏目编号--%>
<p>
</p>
<label for="menuName" style="float: left">
栏目名称:</label>
<input type="text" name="menuName" id="menuName" maxlength="20" onkeyup="checkNull(this)" style="width: 200px" /><p>
</p>
<label for="icoUrl" style="float: left">
栏目图标:</label>
<div>
<div id="J_imageView" style="margin-left: 50px">
<img alt="" id="img_rs_stu" style="width: 32px; height: 32px" src="" />
</div>
<div style="margin-left: 70px; margin-top: 5px; border-bottom: 5px">
<input type="button" id="uploadButton" value="上传" style="height: 50px; width: 110px;
float: left;" />
</div>
</div>
<p>
</p>
</div> <div class="ctent">
<input type="button" id="create-menu" value="新增栏目" />
</div>
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);
});
});
});
//初始化下拉框
function IniteDropDown(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 选项注册事件 根据下拉后赋值给控件
function BindChange() {
$("#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)
}
);
} //初始化加载数据获取列表信息
function GetData() {
InitPager({
PageId: "#paging",
Url: "/ashx/menusHandler.ashx",
Options: { fun: "list", type: iType },
CallBack: function (result) {
$('#tbody').html('');
$("#menuDemo").tmpl(result.Rows).appendTo("#tbody");
return result.Total;
}
});
} var tag, 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>
DropDownControl.ashx 代码:
/// <summary>
/// 获取栏目下拉
/// </summary>
/// <param name="form"></param>
public void GetCloumn(NameValueCollection form)
{
//此处查询节点
var pcode = form["guid"]; var aktype = HttpContext.Current.Request.QueryString["aktype"];
ak_menus bll = new ak_menus();
var tb = bll.GetMenus(pcode, aktype); //根据传递参数 获取数据信息操作了 SerializeResponse(tb,"name");
} } public static void SerializeResponse(DataTable tb, string name)
{
List<DropDown> list = new List<DropDown>(); foreach (DataRow row in tb.Rows)
{
DropDown at = new DropDown();
at.Value = row["guid"].ToString();
if (string.IsNullOrEmpty(name))
{
at.Text = row[name].ToString();
}
else
{ }
list.Add(at);
}
AshxHelper.Write(list);
}
FileUploadHandler.ashx 代码:
public override void ProcessRequest(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 > )
{
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[], configUrl, filedir); //执行文件上传
string FileURLOfServer = FupdHelper.UploadFileFromHtpostfile();
if (!string.IsNullOrEmpty(FileURLOfServer) && FileURLOfServer.Equals(Ak_UploadHelper.UpLoadResult.SUCCESS.ToString()))
{
Hashtable hash = new Hashtable();
hash["error"] = ;
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, string message)
{
Hashtable hash = new Hashtable();
hash["error"] = ;
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);
}
}
menusHandler.ashx 代码:
public override void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain"; if (ValidateUser())
{
StringBuilder strBuilder = new System.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 < )
{
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");
else
strBuilder.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>
void getMaxNum(NameValueCollection form)
{
int type = Convert.ToInt32(form["type"].ToString());
int num = bll.getMaxNum(type); //数据操作查询方法 AshxHelper.Write(num); } /// <summary>
/// 获取数据列表信息
/// </summary>
/// <param name="form"></param>
void GetList(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(new Guid(), strChildNode))
{
AnkeEdu.Model.ak_menus model = new AnkeEdu.Model.ak_menus();
model.guid = AnkeEdu.Tools.NewId.NewUpGuid();
model.akState = ;
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,string strChildNode)
{ var g = new Guid(guid);
if (!bll.IsRepeat(g, strChildNode)) //检测是否重复
{
Model.ak_menus model = new Model.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(string guid)
{
return JsonConvert.SerializeObject(bll.GetModel(new Guid(guid))); //数据操作构造函数
}
效果图:

列表信息显示效果图

基于jQuery+ashx+.net实现三级栏目联动操作的更多相关文章
- 黄聪:基于jQuery+JSON的省市区三级地区联动
查看演示:http://www.helloweba.com/demo/cityselect/ 源码下载:http://files.cnblogs.com/files/huangcong/citysel ...
- 基于jQuery的AJAX实现三级联动菜单
最近学习jQuery,所以就写了一个关于中国省市县/区的三级联动菜单,权当相互学习,相互促进,特此记录. 下面是嵌套js的html文件: <!DOCTYPE html> <html ...
- jquery.cityselect.js基于jQuery+JSON的省市或自定义联动效果
一.插件介绍 最早做省市联动的时候都特别麻烦,后来在helloweba的一篇文章中看到这个插件,很不错的,后来就一直用了. 省市区联动下拉效果在WEB中应用非常广泛,尤其在一些会员信息系统.电商网站最 ...
- 基于Jquery实现省份、城市、区县三级联动
前端感觉写的比较少,也是为了练手,下午没事用来写了这个三级联动,也是第一次写这东西. 据我了解,城市信息可以选择存在数据库或者直接写在前端,为了省事,我直接写在前端,下面是我的代码: <!DOC ...
- 基于jQuery美化联动下拉选择框
今天给大家介绍一款基于jQuery美化联动下拉选择框.这款下下拉选择框js里自带了全国所有城市的数数库.下拉选择框适用浏览器:IE8.360.FireFox.Chrome.Safari.Opera.傲 ...
- 【分享】纯js的n级联动列表框 —— 基于jQuery,支持下拉列表框和列表框,最重要的是n级,当然还有更重要的
多个列表框联动,不算是啥大问题,但是却挺麻烦,那么怎么才能够尽量方便一点呢?网上搜了一下,没发现太好用的,于是就自己写了一个.基于jQuery,无限级联动,支持下拉列表框和列表框. 先说一下步骤和使用 ...
- JQuery实现省市区的三级联动
JQuery实现省市区的三级联动 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "h ...
- JQuery+Ajax实战三级下拉列表联动(八)
本片文章为练习,项目中不会这样写: 一:涉及到的知识点: jQuery Dom操作 jQuery Ajax操作 ASP.net中的json操作 二:用了自动代码生成器 1.Dal层的代码: publi ...
- 纯js的N级联动列表框 —— 基于jQuery
多个列表框联动,不算是啥大问题,但是却挺麻烦,那么怎么才能够尽量方便一点呢?网上搜了一下,没发现太好用的,于是就自己写了一个.基于jQuery,无限级联动,支持下拉列表框和列表框. 先说一下步骤和使用 ...
随机推荐
- [每日一题] OCP1z0-047 :2013-08-24 FLASHBACK—TABLE/PRIMARY KEY(FOREIGN KEY?)......98
正确答案:D 根据题意如下操作: 一.创建表dept gyj@OCM> CREATE TABLE DEPT 2 (DEPTNO NUMBER(2,0), 3 DNAME VARCHAR2(14) ...
- 微信小程序 - 文字收缩与展开
wxml <view class='containers'> <text class="content {{ellipsis?'ellipsis':'unellipsis' ...
- android设备上运行i-jetty服务
android设备上运行i-jetty服务: 1) i-jetty安装 本人小菜一个,i-jetty源码有好几个文件,不知道怎么运行起来,于是找了一个现成可运行的i-jetty工程(感谢这位同学的分享 ...
- 基于vue 的 UI框架 -- Mint UI
网址: http://mint-ui.github.io/docs/#!/zh-cn 官网: http://mint-ui.github.io/#!/zh-cn vue2.0实例: http://bl ...
- nginx 备忘
下载 start nginxlocalhost:80
- java开发工具之myeclipse调优
-vmargs -Xms512m //堆的最小值-Xmx512m //堆的最大值(两者设置相同,避免运行时的自动扩张)-XX:PermSize=256m //永久代的最小值 -XX:MaxPermSi ...
- python之函数用法execfile()
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法execfile() #execfile() #说明:用来执行一个文件,相对于双击的效 ...
- java 多态的好处
/* 对象的多态性. class 动物{} class 猫 extends 动物{} class 狗 extends 动物{} 猫 x = new 猫(); 动物 x = new 猫();//一个对象 ...
- PHP在微博优化中的“大显身手”
新浪微博宋琦:PHP在微博优化中的“大显身手” 地址http://www.csdn.net/article/2013-09-04/2816820-sina
- java MessageFormat.format
sql 语句中格式化,如果加入{}占位符,要替代的是整形变量,而恰好这个整形变量的位数超过4位, MessageFormat.format 会在这个整形变量中默认每隔三位加一个逗号,类似这样:1000 ...