您现在的位置是:网站首页> 编程资料编程资料
利用ASP.Net Core中的Razor实现动态菜单_实用技巧_
2023-05-24
542人已围观
简介 利用ASP.Net Core中的Razor实现动态菜单_实用技巧_
准备
1.框架
.netcore 版本 yishaadmin开源框架
2.模板
本文模板使用adminlte3.0,文档地址
3.菜单表关键字段
id 表主键(当前菜单)
ParentId 父级ID(父级菜单 为0时为顶级菜单,也可能为内容)
MenuUrl 菜单地址(只有页面有地址,本身菜单是空)
MenuType 菜单类型(1是菜单 2是页面 3是按钮)
MenuIcon 图标样式
4.菜单表实体
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using System.Threading.Tasks; using YiSha.Util; namespace YiSha.Entity.SystemManage { [Table("SysMenu")] public class MenuEntity : BaseExtensionEntity { [JsonConverter(typeof(StringJsonConverter))] public long? ParentId { get; set; } public string MenuName { get; set; } public string MenuIcon { get; set; } public string MenuUrl { get; set; } public string MenuTarget { get; set; } public int? MenuSort { get; set; } public int? MenuType { get; set; } public int? MenuStatus { get; set; } public string Authorize { get; set; } public string Remark { get; set; } [NotMapped] public string ParentName { get; set; } } }本文是由于框架内置菜单不支持顶级菜单显示为内容,以及菜单最多只支持三级菜单的问题,故进行了调整。
1.实现思路
下图1区域渲染为菜单,菜单通过点击URL将内容填充到2区域。

2.编码
2.1 建立渲染内容填充方法
将传进来的url通过ajax调用最终渲染到内容区域(id为#Content的Div中),其中beforeSend方法显示Loadding 可根据需要自行调整。url为{area:exists}/{controller=Home}/{action=Index}以及{controller=Home}/{action=Index}根据框架配置填写至菜单
function LoadContent(url) { if (url == null || url == "") return; $.ajax({ url: url, beforeSend: function (XHR) { $.blockUI({ message: ' ' + "加载中..." + '', css: { border: "none", backgroundColor: 'transparent' } }); }, success: function (data) { $("#Content").html(data); setTimeout(function () { $.unblockUI(); }, 100); }, error: function (data, status, e) { $("#Content").html("页面加载失败," + data.status + "," + url + "
" + data.responseText); setTimeout(function () { $.unblockUI(); }, 100); } }); }2.2 建立分部视图
通过建立分部视图MenuTree,循环传入的菜单,初始化时先获取父级ID(ParentId)为0并且类别(MenuType)不为按钮的菜单集合进行循环,根据menuEntity.MenuUrl判断是否为页面,如果依然为菜单则使用Html.PartialAsync("MenuTree")调用自身来实现递归,第二次则根据ViewData["Menu"]传入的当前id作为父级id来寻找子集,直到寻找到最后的层级。
@using System.Collections.Generic @using YiSha.Entity.SystemManage; @model List@{ if (Model.Any()) { long id = 0L; var menu = ViewData["Menu"] as MenuEntity; if (menu != null) id = menu.Id.Value; @foreach (var menuEntity in Model.Where(o => o.ParentId == id && o.MenuType != (int)MenuTypeEnum.Button)) { var icno = string.IsNullOrEmpty(menuEntity.MenuIcon) ? "fa fa-comment" : menuEntity.MenuIcon; @if (!string.IsNullOrEmpty(menuEntity.MenuUrl)) { } else { ViewData["Menu"] = menuEntity; @menuEntity.MenuName
} } } } @menuEntity.MenuName
2.3 调用分布视图
到此这篇关于利用ASP.Net Core中的Razor实现动态菜单的文章就介绍到这了,更多相关ASP.Net Core Razor动态菜单内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
相关内容
- ASP.NET Core中间件会话状态读写及生命周期示例_实用技巧_
- ASP.NET Core构建OData查询Restful API_实用技巧_
- ASP.NET Core中引用OpenAPI服务的添加示例_实用技巧_
- ADO.NET基础知识详解_基础应用_
- asp.net使用WebAPI和EF框架结合实现数据的基本操作_实用技巧_
- 对ASP.Net的WebAPI项目进行测试_实用技巧_
- VS2022 .NET5一键发布到远程腾讯云IIS服务器的详细步骤_实用技巧_
- EF Core的CRUD(增删改查)基本操作_实用技巧_
- 使用ASP.NET Web API构建Restful API_实用技巧_
- Asp.Net在线预览Word文档的解决方案与思路详解_实用技巧_
