iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >利用ASP.Net Core中的Razor实现动态菜单
  • 267
分享到

利用ASP.Net Core中的Razor实现动态菜单

2024-04-02 19:04:59 267人浏览 泡泡鱼
摘要

目录准备1.实现思路2.编码2.1  建立渲染内容填充方法2.2  建立分部视图2.3 调用分布视图准备 1.框架 .netcore  版本 

准备

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: '<div class="loaderbox"><div class="loading-activity"></div> ' 
                 + "加载中..." + '</div>', 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 + "<br />" + 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<MenuEntity>


@{
    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))
            {
               <li class="nav-item">
                   <a href="#" rel="external nofollow"  rel="external nofollow"  class="nav-link" onclick="LoadContent('@menuEntity.MenuUrl')">
                       <i class="nav-icon @icno"></i>
                       <p>
                           @menuEntity.MenuName
                       </p>
                   </a>
               </li>
            }
            else
            {
                ViewData["Menu"] = menuEntity;
                <li class="nav-item">
                    <a href="#" rel="external nofollow"  rel="external nofollow"  class="nav-link">
                    <i class="nav-icon @icno"></i>
                    <p>
                        @menuEntity.MenuName
                        <i class="fas fa-angle-left right"></i>
                    </p>
                    </a>
                    <ul class="nav nav-treeview">
                         @await Html.PartialAsync("MenuTree",
                         Model,new ViewDataDictionary(ViewData))
                    </ul>
               </li>
            }
         }
    }
}

2.3 调用分布视图

<aside class="main-sidebar sidebar-dark-primary elevation-4" style="width:200px;position:fixed">
            <!-- Brand LoGo -->
            
            <!-- Sidebar -->
            <div class="sidebar">

                <!-- Sidebar Menu -->
                <nav class="mt-2">
                    <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
                        <!-- Add icons to the links using the .nav-icon class
    with font-awesome or any other icon font library -->

                        <li class="nav-header" style="font-size:1.0rem">
                            <img src="~/yisha/img/logo1.png" style="width: 30px; height: 30px; " />
                            任务管理系统
                        </li>

                        @await Html.PartialAsync("MenuTree", Model)
                    </ul>
                </nav>
                <!-- /.sidebar-menu -->
            </div>
            <!-- /.sidebar -->
        </aside>

        <!-- Content Wrapper. Contains page content -->
        <div class="content-wrapper" id="mainhead">
            <div id="Content">

            </div>
        </div>

到此这篇关于利用ASP.net core中的Razor实现动态菜单的文章就介绍到这了,更多相关ASP.net core Razor动态菜单内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 利用ASP.Net Core中的Razor实现动态菜单

本文链接: https://www.lsjlt.com/news/147658.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 利用ASP.Net Core中的Razor实现动态菜单
    目录准备1.实现思路2.编码2.1  建立渲染内容填充方法2.2  建立分部视图2.3 调用分布视图准备 1.框架 .netcore  版本 ...
    99+
    2024-04-02
  • ASP.NET Core中怎么利用 Razor处理Ajax请求
    这篇文章将为大家详细讲解有关ASP.NET Core中怎么利用 Razor处理Ajax请求,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。RazorRazor Pages是ASP.NET Co...
    99+
    2023-06-19
  • ASP.NET Core如何实现简单的静态网站滚动更新
    目录IntroFileProviderConstruct HostDemoMore总结Intro 最近我们老板想让我实现一个静态网站“滚动更新”的功能,其实就是希望网站部署的时候网...
    99+
    2024-04-02
  • DjangoVue实现动态菜单和动态权限
    目录用户与用户组的架构设计动态菜单和权限的设计思路与实现Vue 端如何实现动态路由Django 端如何实现动态权限随着前后端分离架构的流行,在 web 应用中,RESTful API...
    99+
    2024-04-02
  • ASP.NET Core实现动态获取文件并下载
    ASP.NET Core 中,可以在静态目录添加文件,直接访问就可以下载。但是这种方法可能不安全,也不够灵活。 我们可以在 Controller 控制器中 添加 一个 Action,...
    99+
    2024-04-02
  • vue实现三级联动动态菜单
    本文实例为大家分享了vue实现三级联动动态菜单的具体代码,供大家参考,具体内容如下 三级联动动态菜单展示:一级菜单选中,生成二级菜单数据,二级菜单选中,生成三级菜单数据(根据上一级菜...
    99+
    2024-04-02
  • Asp.Net Core 中怎么利用Cookie实现身份认证
    这篇文章将为大家详细讲解有关Asp.Net Core 中怎么利用Cookie实现身份认证,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一 注册Cookie认...
    99+
    2024-04-02
  • 怎么使用SpringBoot+Vue实现动态菜单
    本篇内容介绍了“怎么使用SpringBoot+Vue实现动态菜单”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 整体思路效果图:最终菜单...
    99+
    2023-07-02
  • 如何利用Vue3管理系统实现动态路由和动态侧边菜单栏
    目录前言动态路由动态侧边菜单栏总结前言 在做Vue管理系统的时候,都会遇到的一个需求:每个用户的权限是不一样的,那么他可以访问的页面(路由),可以操作的菜单选项是不一样的,如果由后端...
    99+
    2024-04-02
  • LayUI+Shiro实现动态菜单并记住菜单收展的示例
    目录一、Maven 依赖二、菜单相关的类1、主菜单2、子菜单三、Shiro 配置1、ShiroConfig2、自定义shiro密码校验四、控制类1、LoginController2、...
    99+
    2024-04-02
  • css如何实现动态二级菜单
    这篇文章将为大家详细讲解有关css如何实现动态二级菜单,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。动态实现简单的二级菜单当鼠标放到一级标签上时,鼠标会变成小手的形状 展示二级菜单,源码如下,复制即可直接...
    99+
    2023-06-08
  • SpringBoot+Vue实现动态菜单的思路梳理
    目录1. 整体思路2. 前端渲染3. 后端菜单生成3.1 菜单表3.2 菜单接口关于 Spring Boot + Vue3 的动态菜单,松哥之前已经写了两篇文章了,这两篇文章主要是从...
    99+
    2024-04-02
  • Android动态更新Menu菜单的实现过程
    目录1. 需求描述2. 基础知识3. 菜单加载4. 需求实现5. 总结1. 需求描述 Android Menu菜单是比较常见的功能,在ActionBar  or ToolB...
    99+
    2024-04-02
  • ASP.NET Core中使用Redis实现缓存
    目录一、前言二、安装StackExchange.Redis三、添加配置四、Redis帮助类五、添加服务依赖项六、在控制器中使用七、测试一、前言 我们这里以StackExchange....
    99+
    2024-04-02
  • vue+quasar使用递归实现动态多级菜单
    本文实例为大家分享了vue+quasar使用递归实现动态多级菜单的具体代码,供大家参考,具体内容如下 效果图: 菜单初始化入口 menu.vue,初始化侧边栏菜单组建,<my...
    99+
    2024-04-02
  • Vue中怎么利用ElementUI实现表单动态渲染
    本篇文章为大家展示了Vue中怎么利用ElementUI实现表单动态渲染,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。{  "inline&quo...
    99+
    2024-04-02
  • 利用ANSI控制码实现彩色的Windows启动菜单
    电脑启动菜单选项默认一般都是白色的,但我们可以修改C盘根目录下的boot.ini(隐藏文件)可以使用ANSI控制码来控制启动菜单显示出彩色。现在就讲解一下根据以下短短的代码来为自己设计一个彩色的Windows启动菜单。这...
    99+
    2023-05-29
    彩色 windows 启动菜单 菜单 Windows ANSI
  • Asp.net core中依赖注入的实现
    使用服务 在Asp.net core的Controller中,可以通过如下两种方式获取系统注入的服务: 构造函数 可以直接在构造函数中传入所依赖的服务,这是非常常见的DI注入方式。 ...
    99+
    2024-04-02
  • 利用Struts怎么实现一个动态表单
    今天就跟大家聊聊有关利用Struts怎么实现一个动态表单,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.手动进行定义<form-beans > <form-bea...
    99+
    2023-05-31
    struts st
  • ASP.NET Core实现自动依赖注入的示例
    这篇文章主要介绍了ASP.NET Core实现自动依赖注入的示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在开发.NET Core web服务的时候,我们习惯使用自带的依...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作