ztree分类页面代码
后台代码:
[Area("Adnn1n")]
public class CategoryController : BaseController
{
private readonly DAL.Interface.ICategory dal;
public CategoryController(ICategory dal)
{
this.dal = dal;
}
public IActionResult Index()
{
List<Model.Category> listca = dal.GetList("");
ArrayList arr = TreeTool.GetCaJson(listca);
ViewBag.ztreejson = Newtonsoft.Json.JsonConvert.SerializeObject(arr);
return View();
}
[HttpPost]
public ActionResult Add(Model.Category m)
{
try
{
if (m.Id == 0)
{
dal.Add(m);
return Json(new { code = 0, msg = "新增成功!" });
}
else
{
dal.Update(m);
return Json(new { code = 0, msg = "编辑成功!" });
}
}
catch (Exception ex)
{
return Json(new { code = 1, msg = $"出错:{ex.Message}" });
}
}
public ActionResult Delete(string ids)
{
try
{
int success = 0;
string[] ss = ids.Split(',');
foreach (var item in ss)
{
int x;
if (int.TryParse(item, out x))
{
dal.Delete(x);
success++;
}
}
return Json(new { code = 0, msg = "成功删除" + success + "条记录!" });
}
catch (Exception ex)
{
return Json(new { code = 1, msg = $"出错:{ex.Message}" });
}
}
}
前台代码:
@{
ViewBag.Title = "新闻分类";
}
<link href="~/ztree/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" />
<script src="~/ztree/js/jquery.ztree.core.js"></script>
<table class="layui-table">
<tr>
<td style="vertical-align:top;">
<ul id="treeDemo" class="ztree"></ul>
</td>
<td>
<fieldset>
<legend>增加</legend>
<div class="layui-form-item">
<label class="layui-form-label">父级</label>
<div class="layui-input-block">
<div id="addpname" class="layui-input-inline"></div>
<div class="layui-input-inline">
<button type="button" class="layui-btn layui-btn-xs" onclick="settop()">设为顶级</button>
</div>
</div>
<input id="addpid" type="hidden" value="0" />
</div>
<div class="layui-form-item">
<label class="layui-form-label">名称</label>
<div class="layui-input-block">
<input type="text" id="addname" name="addname" required lay-verify="required" placeholder="" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button onclick="add()" class="layui-btn" lay-submit lay-filter="formDemo">新增</button>
</div>
</div>
</fieldset>
<fieldset>
<legend>编辑</legend>
<div class="layui-form-item">
<label class="layui-form-label">父级ID</label>
<div class="layui-input-block">
<input type="text" id="modpid" required lay-verify="required" placeholder="" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">名称</label>
<div class="layui-input-block">
<input type="text" id="modname" required lay-verify="required" placeholder="" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button onclick="mod()" class="layui-btn layui-btn-normal" lay-submit lay-filter="formDemo">编辑</button>
</div>
</div>
</fieldset>
<fieldset>
<legend>删除</legend>
<div class="layui-form-item">
<label class="layui-form-label">所选</label>
<div id="delname" class="layui-input-block">
</div>
<input type="hidden" id="delid" value="0" />
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button onclick="del()" class="layui-btn layui-btn-danger" lay-submit lay-filter="formDemo">删除</button>
</div>
</div>
</fieldset>
</td>
</tr>
</table>
<script>
var zTreeObj;
// zTree 的参数配置,深入使用请参考 API 文档(setting 配置详解)
var setting = {
callback: {
onClick: zTreeOnClick
}
};
// zTree 的数据属性,深入使用请参考 API 文档(zTreeNode 节点数据详解)
var zNodes = @Html.Raw(ViewBag.ztreejson)
//[
// {
// name: "test1", open: true, children: [
// { name: "test1_1" }, { name: "test1_2" }]
// },
// {
// name: "test2", open: true, children: [
// { name: "test2_1" }, { name: "test2_2" }]
// }
//];
$(document).ready(function () {
zTreeObj = $.fn.zTree.init($("#treeDemo"), setting, zNodes);
});
//树结点点击
function zTreeOnClick(event, treeId, treeNode) {
console.log("id:" + treeNode.id + ",name:" + treeNode.name + ",pid:" + treeNode.pid + ",pname:" + treeNode.pname);
//新增区域里的父级是当前点击的节点,即要在当前点击的结点下添加分类
$("#addpid").val(treeNode.id);
$("#addpname").html(treeNode.caname);
//编辑区域
$('#modpid').val(treeNode.pid);
$('#modname').val(treeNode.caname);
//删除区域
$("#delname").html(treeNode.caname);
$("#delid").val(treeNode.id);
};
//设为顶级
function settop() {
$("#addpid").val(0);
$("#addpname").html('');
}
//新增
function add() {
var pid = $("#addpid").val();
var name = $('#addname').val();
if (name == "") {
alert("请输入要新增的分类名称。");
return;
}
var postdata = { Pid: pid, Caname: name };
var url = "/adnn1n/category/add";
$.post(url, postdata, function (data) {
alert(data.msg);
if (data.code == 0) {
location.reload();
}
})
}
//删除
function del() {
if (confirm('是否确认删除该分类?')) {
var id = $("#delid").val();
if (id == 0) {
alert("请选择要删除的分类。");
return;
}
var url = "/adnn1n/category/delete?ids=" + id;
$.get(url, function (data) {
alert(data.msg);
if (data.code == 0) {
location.reload();
}
})
}
}
//编辑
function mod() {
var id = $('#delid').val();
if (id == 0) {
alert("请选择要编辑的分类。");
return;
}
var name = $("#modname").val();
if (name == "") {
alert("请输入要编辑的分类名称。");
return;
}
var pid = $('#modpid').val();
if (pid == "") {
alert("请输入pid。");
return;
}
var postdata = { Id: id, Caname: name, Pid: pid };
var url = "/adnn1n/category/add";
$.post(url, postdata, function (data) {
alert(data.msg);
if (data.code == 0) {
location.reload();
}
})
}
</script>
那个treetool类是自己写的一个工具,用递归取数据拼接成ztree需要的JSON结构
using JCT.Model;
using System.Collections;
namespace JCT.Web.Models
{
public class TreeTool
{
#region kendon-dropdowntree
//public static string GetTreeJson_kendo(List<Category> list)
//{
// List<TreeNode_kendo> list_return = new List<TreeNode_kendo>();
// var top = list.Where(a => a.Pid == 0);
// foreach (var item in top)
// {
// TreeNode_kendo node = new TreeNode_kendo()
// {
// id = item.Id,
// caname = item.CaName,
// };
// DiGuiAdd_kendo(node, list);
// list_return.Add(node);
// }
// return Newtonsoft.Json.JsonConvert.SerializeObject(list_return);
//}
//private static void DiGuiAdd_kendo(TreeNode_kendo node, List<Category> list)
//{
// var sub = list.Where(a => a.Pid == node.id);
// if (sub.Count() == 0)
// {
// return;
// }
// List<TreeNode_kendo> list_sub = new List<TreeNode_kendo>();
// foreach (var item2 in sub)
// {
// TreeNode_kendo node2 = new TreeNode_kendo()
// {
// id = item2.Id,
// caname = item2.CaName,
// };
// DiGuiAdd_kendo(node2, list);
// list_sub.Add(node2);
// }
// node.items = list_sub;
//}
#endregion
#region ztree
/// <summary>
/// 用于分类管理页面的树,显示分类ID
/// </summary>
/// <param name="listca"></param>
/// <returns></returns>
public static ArrayList GetCaJson(List<Model.Shop_category> listca)
{
ArrayList arr = new ArrayList();
var top = listca.Where(a => a.Pid == 0);
foreach (var item in top)
{
Model.CaZtree tree1 = new Model.CaZtree()
{
id = item.id,
name = item.caname + "(ID:" + item.Id + ")",
caname = item.caname,
pid = 0,
pname = "",
children = null,
};
DiGuiAddChildren(listca, tree1);
arr.Add(tree1);
}
return arr;
}
/// <summary>
/// 递归添加下级分类
/// </summary>
/// <param name="listca"></param>
/// <param name="tree1"></param>
/// <exception cref="NotImplementedException"></exception>
private static void DiGuiAddChildren(List<Shop_category> listca, CaZtree tree1)
{
var sub = listca.Where(a => a.Pid == tree1.id);
if (sub.Count() > 0)
{
tree1.children = new List<CaZtree>();
}
foreach (var item in sub)
{
Model.CaZtree tree2 = new CaZtree()
{
id = item.id,
name = item.caname + "(ID:" + item.id + ")",
caname = item.caname,
pid = tree1.id,
pname = tree1.name,
children = null,
};
DiGuiAddChildren(listca, tree2);
tree1.children.Add(tree2);
}
}
#endregion
}
}
ztree 下载:http://image.niunan.net/zTree_v3-master.zip
官网:https://www.treejs.cn/v3/main.php#_zTreeInfo