热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

bootstrapadminlte教程3:实现菜单权限管理菜单树2实现Menu菜单分布局

后台的左侧的菜单是要根据不同的角色登录有不同的显示,怎么实现哩?首先在我所有的后台布局页_AdminLayout中增加一个分布局的引用其中:调用Menus控制器中Men

后台的左侧的菜单是要根据不同的角色登录有不同的显示,怎么实现哩?

1.后台布局页面的调用

首先在我所有的后台布局页_AdminLayout 中增加一个分布局的引用

 

其中:

@Html.Action("Menu", "Menus")

  调用Menus控制器中Menu方法

下面的:

	@RenderBody()    ///布局页面调用的主体

  

2.新建一个数据模型。

我是在ViewModel下新建LeftMenus.cs,其中字段为MenuRoles表中的内容,实际 我就图方便,复制了一个Model中的Menu.cs的内容

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace jsdhh2.ViewModels
{
	public class LeftMenus
	{
		/// 
		/// 菜单ID
		/// 
		[Display(Name = "菜单id")]
		public string Id { get; set; }

		/// 
		/// 上级ID
		/// 
		[Display(Name = "上级菜单Id")]
		public string ParentId { get; set; }



		/// 
		/// 名称
		/// 
		[Display(Name = "菜单名称")]
		public string Name { get; set; }

		/// 
		/// URL
		/// 
		[Display(Name = "菜单网址")]

		public string Url { get; set; }

		/// 
		/// 排序越大越靠后
		/// 
		[Display(Name = "排序数字")]
		public int Order { get; set; }

		/// 
		/// 菜单类型
		/// 

		[Display(Name = "类型")]

		public string MenuType { get; set; }

		/// 
		/// 创建日期
		/// 
		/// 
		[Display(Name = "菜单样式")]
		public string MenuCss { get; set; }


		[Display(Name = "菜单图标")]
		public string MenuIcon { get; set; }
		/// 
		/// 菜单类型名称
		/// 

		[Display(Name = "小标样式")]
		public string MenuSmallCss { get; set; }


		[Display(Name = "小标内容")]
		public string MenuSmallValue { get; set; }

		public string Code { get; set; }




	}
}

  

3.写Menus控制器下Menu方法

// GET: Menus-layout
		//public async Task Permissions(string roleNamel)
		 [ChildActionOnly]                   //局部子视图调用
		public ActionResult Menu()
		{
			string _rolename = Session["role"].ToString();         //找到在home/index方法中存入的Session[role]值给变量
		 
			if (_rolename == "无")                     //随便加的一个可能有问题
			{
				return NewMethod();
			}
			var menuroles = (from m in db.Menus                    ///这个地方,我干了三天,原来必须要括进来,改为.TolIST(),因为EF是延迟加载,不执行,要选ToList() 就会转为SQL执行,也就不会产生Null,到时提示引入模型不正确。
							join mr in db.MenuRoles
							on m.Id equals mr.MenuId
							where mr.RoleName == _rolename
							select new LeftMenus { Id=m.Id, ParentId=m.ParentId, Name=m.Name, Url=m.Url, Order =m.Order, MenuType =m.MenuType, MenuCss =m.MenuCss , MenuIcon =m.MenuIcon , MenuSmallCss =m.MenuSmallCss , MenuSmallValue =m.MenuSmallValue })
							.ToList();

		 

			return View(menuroles);    //返回模型
			//return PartialView("Menu");
			//return View(await db.Menus.ToListAsync());
		}
  5.Menu分布局的前台

按在头部进行引用,因为用了ToList(),所以要改为:这里也相当重要呀。

@model IList
 @{
	 Layout = null;
 }

  为了先达到效果,我在Menu中加入了一个foreach,读出来再说

 然后前台的遍历就很重要了,这里再次感觉

 】芭娜娜Banana²º¹⁷ 老师的无私教学,呵。 因为adminlte的头上部有好多LI,我就只复制了显示菜单的这部份
 
	@foreach (var item in Model.Where(n => n.ParentId == null))
		{

			if (Model.Where(m => m.ParentId == item.Id).Count() == 0)
			{
				
  • @Html.DisplayFor(modelItem => item.Name)
  • } else {
  • @Html.DisplayFor(modelItem => item.Name)
  • } }

    效果图  

    然后可以自己加一起图标,比如二级的

     

     
     
     

    推荐阅读
    • 如何使用 `org.eclipse.rdf4j.query.impl.MapBindingSet.getValue()` 方法及其代码示例详解 ... [详细]
    • 深入解析 SQL 数据库查询技术
      本文深入探讨了SQL数据库查询技术,重点讲解了单表查询的各种方法。首先,介绍了如何从表中选择特定的列,包括查询指定列、查询所有列以及计算值的查询。此外,还详细解释了如何使用列别名来修改查询结果的列标题,并介绍了更名运算的应用场景和实现方式。通过这些内容,读者可以更好地理解和掌握SQL查询的基本技巧和高级用法。 ... [详细]
    • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
      在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
    • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
    • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
    • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
    • NOIP2000的单词接龙问题与常见的成语接龙游戏有异曲同工之妙。题目要求在给定的一组单词中,从指定的起始字母开始,构建最长的“单词链”。每个单词在链中最多可出现两次。本文将详细解析该题目的解法,并分享学习过程中的心得体会。 ... [详细]
    • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
    • 本文探讨了一种高效的算法,用于生成所有数字(0-9)的六位组合,允许重复使用数字,并确保这些组合的和等于给定的整数N。该算法通过优化搜索策略,显著提高了计算效率,适用于大规模数据处理和组合优化问题。 ... [详细]
    • 深入解析C#中app.config文件的配置与修改方法
      在C#开发过程中,经常需要对系统的配置文件进行读写操作,如系统初始化参数的修改或运行时参数的更新。本文将详细介绍如何在C#中正确配置和修改app.config文件,包括其结构、常见用法以及最佳实践。此外,还将探讨exe.config文件的生成机制及其在不同环境下的应用,帮助开发者更好地管理和维护应用程序的配置信息。 ... [详细]
    • 在洛谷 P1344 的坏牛奶追踪问题中,第一问要求计算最小割,而第二问则需要找到割边数量最少的最小割。通过为每条边附加一个单位权值,可以在求解最小割时优先选择边数较少的方案,从而同时解决两个问题。这种策略不仅简化了问题的求解过程,还确保了结果的最优性。 ... [详细]
    • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
    • 在探讨如何在Android的TextView中实现多彩文字与多样化字体效果时,本文提供了一种不依赖HTML技术的解决方案。通过使用SpannableString和相关的Span类,开发者可以轻松地为文本添加丰富的样式和颜色,从而提升用户体验。文章详细介绍了实现过程中的关键步骤和技术细节,帮助开发者快速掌握这一技巧。 ... [详细]
    • 本文全面解析了 Python 中字符串处理的常用操作与技巧。首先介绍了如何通过 `s.strip()`, `s.lstrip()` 和 `s.rstrip()` 方法去除字符串中的空格和特殊符号。接着,详细讲解了字符串复制的方法,包括使用 `sStr1 = sStr2` 进行简单的赋值复制。此外,还探讨了字符串连接、分割、替换等高级操作,并提供了丰富的示例代码,帮助读者深入理解和掌握这些实用技巧。 ... [详细]
    • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
    author-avatar
    拍友2502905977
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有