public ActionResult Create(MenuModel menu) { if (ModelState.IsValid) { //新建菜单的创建日期和修改日期为当前日期 menu.CreateDate = DevTools.GetNowDateTime(); menu.ModifyDate = menu.CreateDate; db.Menus.Add(menu); db.SaveChanges(); return RedirectToAction("Index"); } return View(menu); }
//根据id及parentid保存path,便于数据的检索 private bool savePath(MenuModel menu) { try { if (menu.ParentId == 0) { menu.Path = "0," + menu.MenuId + ","; } else { MenuModel parentData = db.Menus.Single(d => d.MenuId == menu.ParentId); menu.Path = parentData.Path + menu.MenuId + ","; } db.Entry(menu).State = EntityState.Modified; db.SaveChanges(); } catch (Exception ex) { ModelState.AddModelError("", ex.Message); return false; } return true; }
//获取parentId字段的下拉选择集合 private List<SelectListItem> getParentSelectList(MenuModel menu) { int depth = 1; var AllList = new List<SelectListItem>(); AllList.Add(new SelectListItem { Text = "/", Value = "0" });//添加根parentId if (menu == null) { menu = new MenuModel { ParentId = 0 }; } int selectedParentId = menu.ParentId;//传入的记录的上级菜单id,用于设定selectList的默认选中项 GetChildrenList(menu, AllList, depth, selectedParentId); return AllList; }
private List<MenuModel> GetChildrenList(MenuModel menu, List<SelectListItem>AllList, int depth, int selectedParentId) { var list = db.Menus.Where(o => o.ParentId == menu.MenuId).OrderBy(o=>o.MenuId).OrderByDescending(o=>o.SortId); if(depth == 1)//如果是第一层,那应该取parentId为0的 list = db.Menus.Where(p => p.ParentId == 0).OrderBy(o=>o.MenuId).OrderByDescending(o=>o.SortId); if (list.Count() == 0) return null; ++depth; string s2 = ""; for (int j = 1; j < depth; j++) { s2 += "_";//分隔符 } foreach (var child in list) { if (selectedParentId == child.MenuId)//如果此菜单是传入菜单的父级 AllList.Add(new SelectListItem { Text = s2 + child.MenuName, Value = child.MenuId.ToString(),Selected = true });//添加下级的ParentId else AllList.Add(new SelectListItem { Text = s2 + child.MenuName, Value = child.MenuId.ToString() });//添加下级的ParentId GetChildrenList(child, AllList, depth, selectedParentId); } return list.ToList(); }
private List<MenuModel> GetAllChildrenList(MenuModel menu, ref List<MenuModel>SortList, int depth) { if (menu == null)//第一次调用时取第一级,所以parentId = 0 { menu = new MenuModel { ParentId = 0}; } var list = db.Menus.Where(p => p.ParentId == menu.MenuId).OrderBy(o => o.MenuId).OrderByDescending(o => o.SortId); if(depth == 1) list = db.Menus.Where(p => p.ParentId == menu.ParentId).OrderBy(o => o.MenuId).OrderByDescending(o => o.SortId); if (list.Count() == 0) return SortList; ++depth; string s2 = ""; for (int j = 2; j < depth; j++) { s2 += " ";//分隔符 全角空格 } foreach (var child in list) { if(depth != 2) child.MenuName = s2 + s1 + child.MenuName; SortList.Add(child);//添加下级的ParentId GetAllChildrenList(child, ref SortList, depth); } return SortList; }
public ActionResult Edit(MenuModel menu) { if (ModelState.IsValid) { //修改日期为当前日期 menu.ModifyDate = DevTools.GetNowDateTime(); db.Entry(menu).State = EntityState.Modified; db.SaveChanges(); if (!savePath(menu))//保存path字段,路径如 0,1,2 { return View(menu); } return RedirectToAction("Index"); } ViewBag.ParentId = getParentSelectList(menu); //暂时不做缓存 OutputCacheAttribute.ChildActionCache = new MemoryCache("MyMenus"); return View(menu); }