在mvc中动态加载菜单

ThinkPHP框架下RBAC权限管理系统的角色导航菜单动态加载 在信息技术的历史长河中,访问控制一直扮演着至关重要的角色。最初的访问控制模型基于严格的主机安全和操作系统级别的控制。随着时间的推移和技术的进步,角色基础访问控制(RBAC)模型逐渐取代了这些早期的方法。RBAC的出现,是为了解决传统访问控制在管理复杂性方面的挑战。ThinkPHP是一个国产的开源PHP框架,它以松耦合、灵活、简洁和快速而闻名。在进入讨论MVC设计模式之前,我们需要先了解ThinkPHP的诞生背景和核心特性。安全性对于权限管理系统来说是至关重要的。 阅读详情

 

最近做了一个项目, 要在客户端动态的显示菜单,也就是这些菜单是保存在数据库中的, 在客户端动态加载菜单,这样做的好处很明显,就是菜单很容易修改,直接在后台进行维护,再也不会直接在前面的 视图页面中进行修改,但是,缺点也很明显,实现起来有一定的难度,如果菜单多的话,在前台首次加载时,页面就会变慢,我想谈谈自己在这方面的经验

 

首先, 我们要创建两个表,(其实一个表也可以了,不过那样的话会变得比较复杂), 一个一级分类表, 一个二级分类表, 两个表的结构如下 :

 

一个是一级分类表,对应的就是父级菜单, 一个是二级分类表,对应的就是子菜单

实现步骤如下: 定义一个方法, 读取所有的一级分类的菜单, (注意在一级分类中的菜单编码 (channelNo)是唯一的) , 然后定义一个 查询出指定一级编号下的所有的二级菜的 返回 类型都是集合类型

这样编写好相关的数据访问层后,在控制器中直接调用就可以了,关键步骤是在视图中,在控制器中要定义两个 关键的Action, 一个获取一级分类, 一个获取一级分类下的二级分类名称,我的控制器中的 Action是这样写的:

 

 1         /// <summary>
 2         /// 获取一级分类名称 帮助导航列表
 3         /// </summary>
 4         /// <returns></returns>
 5         public ActionResult GetAll()
 6         {
 7             //一级分类名称
 8             var model = channelService.GetAll();
 9             return PartialView("/views/shared/_help.cshtml", model);
10         }
11 
12 
13         /// <summary>
14         /// 一级分类下的二级分类名称  帮助导航列表
15         /// </summary>
16         /// <param name="chid"></param>
17         /// <returns></returns>
18         public ActionResult GetMenu(int chid)
19         {
20             ///一级分类下的二级分类名称 
21             var model = partService.GetAll(chid);
22             return PartialView("/views/shared/_menu.cshtml", model);
23 
24         }

返回的都是一个部分视图, 在这两个部分视图中,是这样布局的

 

 1 @{
 2     Layout = null;
 3 }
 4 @model  IEnumerable<xftwl.Common.ChannelModel>
 5 
 6  
 7   <div id="accordion1" class="accordion">
 8     <div class="accordion-top"><h3>帮助中心</h3></div>
 9     
10     @if (Model != null)
11     {
12 
13         foreach (var item in Model)
14         {
15             if (item.Id > 0)
16             {
17                   <div class="accordion-group">
18                       <div class="accordion-heading"> 
19                           <a class="accordion-toggle" href="#" data-target="#@item.Id" data-toggle="collapse">                                                         @item.ChannelName
20                           </a>
21                       </div>
22                        <div id="@item.Id" class="accordion-body collapse">
23                              @Html.Action("GetMenu", "Help", new { chid = item.Id })
24                       </div>
25 
26                     </div>
27     
28             }
29         }
30     }
31 
32     </div>
33 
34    

在 _menu.cshtml 部分视图中, 视图是这样布局的

 1 @{
 2     Layout = null;
 3 }
 4 @model  IEnumerable<xftwl.Common.PartModel>
 5 
 6  @if( Model !=null)
 7  {
 8      foreach (var t in Model)
 9      {
10              <div class="accordion-inner clearfix">
11                 <label class="field"><a href="@Url.Action("Index", "help", new {prtid=t.Id })" target="test"><strong>@t.PartName</strong></a></label>
12             </div>      
13      }
14  }

最后,在控制器 的 Index 视图中这样来写 :

 1     ViewBag.Title = "帮助中心";
 2     Layout = "~/Views/Shared/_Layout.cshtml";
 3 }
 4 @model IEnumerable<xftwl.Common.ArticleModel>
 5 
 6 <!--main-->
 7 <div class="container content-main-help">
 8 @*    @Html.Partial("_HelpMeau")*@
 9 
10     @Html.Action("getall","help")
11  <div class="help-text-right">
12 
13      @if (Model != null)
14      {
15 
16          foreach (var item in Model)
17          { 
18          
19                <div style="height:auto">
20 
21                    <a href="@Url.Action("Detail","Help", new{Id=item.Id})" >  @item.Title</a>
22                </div>
23 
24          }
25      }
26 
27   </div>
28 </div>
29  
30 <!--main end-->

其中的循环遍历是获取一级分类的名称的,好,运行一下看看效果怎么样

这是所有的一级菜单展开后的样子。好了,今天就到这吧。

 

 

 

 

 

 

mvc构架实现树型表格,菜单 用mvc asp.net 实现树型表格,菜单; 立即下载

相关推荐

C#权限管理系统--动态加载菜单栏

一个权限管理系统的实例,有数据库和项目,这一个例子有一定的注释。 可以学会C#权限管理,动态加载菜单栏。

ASP.NET CORE MVC动态生成左侧菜单栏

因为自己的一个小项目中需要动态的去构建任务栏,上网查询得到了以下的处理方式:

mwcxz的博客 2656

C#BS版本的根据用户权限动态加载菜单.rar

C#BS版本的根据用户权限动态加载菜单.rar

从数据库动态加载菜单栏

从数据库动态加载菜单栏 最近组内有个技术学习项目—用Python写一个Web站点,我领取的任务是将站点菜单可配置,从数据库中读取数据,然后动态构建。 基本的思路是这样:把需要显示的菜单数据存储在数据库,页面加载的时候,JS从后台读取数据,在前端构建Dome并正确显示。 第一步:设计数据库 1.1.数据库字段设计 ID:菜单节点记录唯一识别字段,设为主键 Name:菜单节点的名称 Sh

SD_JZZ的博客 1万+

登录权限+动态菜单显示

该资源是本人自己编写的登录权限所有源码,动态显示选项菜单

从数据库中读出数据动态生成菜单栏

从数据库中读出数据,动态绑定到menu菜单栏,不同权限读出的菜单栏不同

Vue3 中如何加载动态菜单?

这两篇文章主要是和大家说明了后端如何根据当前登录用户,动态生成一个菜单JSON。那么现在的问题就是,当前端收到后端返回来的菜单JSON之后,该如何将之渲染出来?这就是我们目前所面临的问题了。TienChin项目基于RuoYi脚手架来完成,所以本文的分析你也可以看作是对RuoYi-Vue3项目的分析。...

江南一点雨的专栏 4525

动态生成树形菜单

动态生成树形菜单 代码简单 虽然不是终极的 但是稍加修改即可直接使用

asp.net MVC 根据菜单树类别不同动态加载视图的实现步骤

这样,当用户访问不同的菜单项时,ASP.NET MVC 将根据类别加载相应的视图,并显示特定类别的内容。在视图中,根据每个菜单项的类别动态加载对应的部分视图。如果你想在用户点击菜单项时动态加载部分视图,可以使用 Ajax。这样,点击菜单项时,将通过 Ajax 请求加载相应的视图内容。动态加载视图,确保视图根据菜单项的类别正确显示。在控制器中,构建你的菜单树,并传递给视图。首先,创建不同类别的部分视图。创建与每个类别对应的部分视图,例如。其他类别的部分视图可以类似创建。属性,表示菜单项的类别。

风清扬的专栏 550

LSF实践专题(15):LSF队列优先级以及抢占功能初探

在LSF暂停作业时,会向作业发送一个SIGTSTP信号,并且将作业状态变成SSUSP(system suspend),表示被系统暂停,这时,最好是作业的应用能够捕获和处理SIGTSTP信号,否则,即使在LSF中,作业会被认为暂停了,并且释放了slots资源,但是在实际OS中,作业进程仍然在继续,并且不会释放CPU等计算资源。是指LSF自动将低优先级作业暂停(suspend),将空余出来的资源交给高优先级队列中的作业使用,等到高优先级队列的作业结束后,再将被暂停的作业恢复(resume)并继续运行。

richycn的博客 1919

Moveit +Gazebo:搭建单臂机械臂仿真平台

Moveit +Gazebo:搭建单臂机械臂仿真平台

magic_invaid的博客 5290

asp.net MVC 根据菜单树类别不同,动态加载视图

这样,当用户访问不同的菜单项时,ASP.NET MVC 将根据类别加载相应的视图,并显示特定类别的内容。在视图中,根据每个菜单项的类别动态加载对应的部分视图。如果你想在用户点击菜单项时动态加载部分视图,可以使用 Ajax。这样,点击菜单项时,将通过 Ajax 请求加载相应的视图内容。动态加载视图,确保视图根据菜单项的类别正确显示。在控制器中,构建你的菜单树,并传递给视图。首先,创建不同类别的部分视图。创建与每个类别对应的部分视图,例如。其他类别的部分视图可以类似创建。属性,表示菜单项的类别。

战族狼魂的博客 672

PS2硬盘启动终极指南:从FMCB到OPL,告别光驱打造游戏博物馆

在计算机存储与数据读取领域,硬盘启动技术通过将操作系统或应用程序从本地硬盘直接加载,绕过了传统光驱等外部介质,实现了速度与可靠性的双重提升。其核心原理在于利用引导程序接管系统初始化流程,直接访问硬盘上的特定分区与文件镜像。这项技术的价值在于极大提升了数据读取效率、降低了物理介质损耗,并扩展了存储容量与管理的灵活性。在怀旧游戏硬件改造、嵌入式系统定制等场景中,硬盘启动技术被广泛应用,以实现老旧设备的功能焕新与性能优化。本文聚焦于索尼PS2游戏主机的硬盘启动方案,深入探讨了如何利用FMCB(Free MCBoo

weixin_34295316的博客 1777

Extjs4.2 MVC 左菜单动态加载功能

说实话Ext这个东西还是比较不爽,那个官方的api也太简单了,很多地方都寥寥几句话,搞的像我这样的初学者很泄气,不过做事最好还是有始有终,有点心得,记录一下。 所谓的常见的应用界面就是登录完毕之后,左边一个菜单面板,中间一个TabPanel来放具体功能 后台传回数据后,点左边菜单应该可以动态加载功能 1.登录完毕后,加载左菜单,这个没啥好说的,数据: [code="js"] { ...

peijie73的博客 352

使用Python,OpenCV查找图像中的最亮点

这篇博客展示了,为什么在图像中找到最亮的点之前应用高斯模糊是至关重要的。 通过应用高斯模糊,可以将每个给定半径内的像素平均在一起。取平均值可以去除高频噪声,否则会影响cv2.minMaxLoc函数的结果。 一定要研究高斯模糊半径的恰当值。如果取值太小,将会减轻平均值的影响,而忽略了更大、更亮的区域。但是如果半径太大,将无法探测到小的明亮区域。

qq_40985985的博客 3809

嵌入式软件工程师面试题目整理(一)

文章目录嵌入式软件工程师面试题目整理(一)Arm有多少32位寄存器?Arm2440和6410有什么区别CPU,MPU,MCU,SOC,SOPC联系与差别上拉&下拉&高阻态串口协议讲一讲RS232和RS485通讯接口有什么区别IIC时序图画一下,IIC有哪些状态,给一个字节,将它发送出去。IIC有什么注意事项?有没有用I/O模拟IIC,如果有需要注意什么?为什么2440的内存起始地址是3后面7个0呢?为什么6410的内存起始地址是5后面7个0呢?内存管理有什么看法?(MMU)锁有哪些?有什么注

嵌入式与Linux那些事的博客 7883

mvc 动态加载菜单_开源题材征集 + MVC&EF Core 完整教程小结

到目前为止,我们的MVC+EF Core 完整教程的理论部分就全部结束了,共20篇,覆盖了核心的主要知识点。下一阶段是实战部分,我们将会把这些知识点串联起来,用10篇(天)来完成一个开源项目。现向园友征集题材,你提需求我来实现。请在评论中提出你的需求,并加以简明扼要的描述。题材最好是有趣的、有一定应用价值的,例如像Trello这样的效率管理系统。我将会在选取一个相对适合的题材,通过敏捷开...

weixin_29282577的博客 133

Android软键盘系统深度解析:架构、原理与实现

Android软键盘系统深度解析:架构与实现原理 本文系统剖析了Android软键盘的核心工作机制。作为系统级输入服务,软键盘具有双重属性:既是可安装的独立应用,又深度集成于系统框架中。文章详细解读了软键盘的系统架构,包括其与InputMethodManagerService(IMMS)和WindowManagerService(WMS)的交互机制,以及通过InputConnection实现的跨进程通信流程。同时分析了输入法窗口的特殊管理策略、布局调整模式,并深入探讨了输入预测引擎的实现原理,包括词典加载、

保持专注,保持热爱 115

ASP.NET MVC动态生成网站菜单及子菜单

在开发ASP.NET MVC网站时,Insus.NET想实现动态产生网站的主菜单及子菜单。 你需要在网站管理后台管理此2张表(Menu,SubMenu)的信息,添加,删除,编辑,更新等。   Sequence字段是序号。主菜单按此序号排序。IsMenu字段,添加上来的,不一定是菜单字段。下面Insus.NET有此表添加的内容如下: 以上上主菜单,下面再来看来看看子菜单,结构与数据: 在子...

weixin_34402408的博客 308

串口、COM、UART、TTL、USB、RS-232、RS-485、I2C、SPI、CAN、1-WIRE

一文搞定,赶紧收藏吧

记得诚 3万+

不同IP网段的PLC进行S7通信(PUT_GET)的具体步骤

不同IP网段的PLC进行S7通信(PUT_GET)的具体步骤 一般情况下,我们使用西门子的S7通信时都是将网络中的PLC的IP设置在同一网段,那么如果涉及到旧项目改造时,不方便修改IP地址,只能进行2个网段通信时,可以参考以下步骤: 准备条件: 2个路由器 CPU 1212C 主动连接 CPU 314C-2PN/DP 被动连接 网络搭建如下图所示: S7-1212C一侧 建立S7主动连接 ,IP地址:192.168.5.40,编写get/put 通信程序 S7-300 IP地址:192.168.0

Robot_PLC_HMI_Automation 2万+

来自数据库的MVC 6动态导航菜单

目录 目标 介绍 使用的组件 创建Web项目 迁移 数据服务 导航菜单 接下来是什么 结论 Download source code - 977.3 KB 目标 几年前,我不得不从数据库加载导航菜单并使用Web表单创建菜单控件,因此从数据库加载菜单数据的主要思想是根据用户角色进行过滤。最后,我们将按角色过滤数据。在这里,我们必须使用ASP.NET Core 2.2 MVC...

寒冰屋的专栏 1470

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

下拉菜单按钮追加绑定动态数据图片

开发工具与关键技术: Visual Studio 2015 mvc 作者:彭水清 撰写时间:2019/7/16 当鼠标点击按钮时会出现酒菜小类(WGSmallID)数据下拉框,然后再点击下拉框里的数据会显示酒菜项目(WGItemID)数据。 利用 bootstrap 的组件中的下拉菜单来动态的绑定数据库中的数据,通过 ID 选择器选择到 wineGreensMenu。在控制器查询(小类表查询...

weixin_44540414的博客 314

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ASP.NET Core(2.X) MVC 视图组件的应用,例:动态加载系统菜单导航栏链接

LZ最近在用.NET Core做一个WEB项目,刚好今天做到动态添加系统导航栏的地方,一开始还是按原来所学的,用分部视图,最后发现分部视图在这里,根本不进Controller中的Action,而是直接调用视图展现,查阅官方文档https://docs.microsoft.com/zh-cn/aspnet/core/mvc/views/view-components?view=aspnetcore-...

H_King_H的博客 2142
上一篇: asp mvc 导出txt 文件泛型方法
下一篇: ajax 方法的使用以及方法中各参数的含义
SpringFiled
博客等级 码龄15年 9粉丝 78原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值