基于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,无限级联动,支持下拉列表框和列表框. 先说一下步骤和使用 ...
随机推荐
- C#.Net中操作XML方法一
我们知道XML是一种可标记性的语言,用来标记数据.定义数据类型,是一种执行用户对自己的标记语言进行定义的源语言.由于结构好.而且easy理解,就好比一棵树,层次关系分明,因此也经常把一些数据存储到XM ...
- 算法笔记_117:算法集训之结果填空题集一(Java)
目录 1 空瓶换汽水 2 三人年龄 3 考察团组成 4 微生物增殖 5 除去次方数 6 正六面体染色 7 古堡算式 8 海盗比酒量 9 奇怪的比赛 10 土地测量 1 空瓶换汽水 浪费可耻,节约 ...
- cordova 命令行打包apk
Cordova 打包 Android release app 过程详解: 1.全局安装Cordova CLI: npm install -g cordova 2.创建项目: cordova creat ...
- caffe 代码阅读笔记1
首先查看caffe.cpp里的train函数: // Train / Finetune a model. //训练,微调一个网络模型 int train() { // google的glog库,检查- ...
- python中的多态
# -*- coding: cp936 -*- #python 27 #xiaodeng #python中的多态 #多态:一个操作的意义取决于被操作对象的类型,相同的消息给予不同的对象会引发不同的动作 ...
- Android 4 编程入门经典
这是一本入门级的经典教才从Android编程入门到发布Android应用程序,每一个章节都是讲得很透,让人轻松的接受. 第1章 Android编程入门 1.1 Android简介 1.1.1 Andr ...
- apacheBench对网站进行压力测试
apacheBench对网站进行压力测试 分类: 学习 2014-02-19 10:35 4154人阅读 评论(1) 收藏 举报 apacheBench压力测试 Apache Benchmark下载 ...
- Tomcat SSL配置 Connector attribute SSLCertificateFile must be defined when using SSL with APR解决
原文地址:http://blog.csdn.net/kissliux/article/details/17392003 Tomcat 6版本配置SSL过程有两步: 1.用JDK自带的keytool.e ...
- 阿里云ESC搭建SVN服务端
CentOS7)下yum命令快速安装svn服务端,学习在思考中独孤中度过,在孤独中进取! 01.SVN服务的安装(subversion) 02.ESC安全组策略 1.在线安装svn服务 $ sudo ...
- 不止是动态化:Weex项目和阿里无线技术开源方向
这是开发者正在书写的峥嵘岁月.受益开源,回馈社区.阿里巴巴集团已经开源115个项目,并正式加入FSF基金会,Apache基金会,linux 基金会和Xen的顾问团队,并在云栖大会北京峰会宣布AliSQ ...