动态菜单加载在ASP.Net MVC3剃刀 [英] Dynamic Menu loading in ASP.Net MVC3 Razor
问题描述
我想请教一下在ASP.Net动态数据库驱动的菜单加载
MVC3剃须刀。
这是我的
1.View code
2型号为菜单
3.Model菜单项
4.Navigation模型结构
在这个项目中我有不同的用户登录。对于每个登录他们
通过模块的限制。所以当用户进入与自己的应用程序
登录,他们只有到其账户的机会有限。
例如,有两个用户A和B用户A只能访问帐户和报告,用户B只能访问
报告
块引用>要实现这些东西我加载菜单从数据库中。
的 我的问题是,
如何实现从数据库菜单加载在ASP.Net MVC3剃刀的的 查看code 的
@ {
ViewBag.Title =花好月圆ERP V1.0测试版;
布局=〜/查看/共享/ _LayoutUser.cshtml
}
< DIV CLASS =主容器>
< DIV CLASS =主包装>
< DIV CLASS =滚动顶部>
< A HREF =#类=顶呱呱称号=Go热门><我类=图标箭头向上>&下; / I GT;&下; / A>
< / DIV>
< DIV CLASS =左边栏合并左>
<! - 搜索栏 - >
<! - 左侧导航栏 - >
@section leftnav {
}
< / DIV>
< / DIV>
< DIV CLASS =容器>
< / DIV>
< / DIV>的 菜单模式的
使用系统;
使用System.Collections.Generic;
使用System.Linq的;
使用的System.Web;命名空间Elixir.Models
{
公共类菜单
{
公共菜单()
{
的MenuItems =新的List<&菜单项GT;();
} 公众诠释标识{搞定;组; }
公共字符串名称{;组; }
公开名单<&菜单项GT; {的MenuItems获得;组; }
}
}的 菜单项的
使用系统;
使用System.Collections.Generic;
使用System.Linq的;
使用的System.Web;命名空间Elixir.Models
{
公共类菜单项
{公众诠释标识{搞定;组; }
公众诠释用户名{搞定;组; }
公共字符串名称{;组; }
公共字符串ActionName {搞定;组; }
公共字符串ControllerName {搞定;组; }
公共字符串网址{搞定;组; }
公共菜单ParentMenu {搞定;组; }
}
}导航模型结构的
< DIV CLASS =左侧导航>
< UL类=边导航手风琴ID =NAV-手风琴>
<立GT;< A HREF =#><我类=图标回家>< / I>家庭和LT; / A>< /李>
<立GT;< A HREF =#>< I类=图标列表-ALT>< I&GT /;用户管理与LT; / A>
< UL>
<立GT;< A HREF =#><我类=图标双角向右>< / I>创建新用户< / A>< /李>
<立GT;< A HREF =#><我类=图标双角向右>< /我>管理用户和LT; / A>< /李>
<立GT;< A HREF =#><我类=图标双角向右>< /我>查看用户< / A>< /李>
< / UL>
< /李>
<立GT;< A HREF =#><我类=图标表-2>&下; / I GT;雇员管理与所述; / A>
< UL>
<立GT;< A HREF =#><我类=图标双角向右>< / I>员工登记及LT; / A>< /李>
<立GT;< A HREF =#><我类=图标双角向右>< /我>管理员工与LT; / A>< /李>
<立GT;< A HREF =#><我类=图标双角向右>< /我>查看员工与LT; / A>< /李>
< / UL>
< /李>
<立GT;< A HREF =#>< I类=图标栏>< I&GT /; DMIT管理与LT; / A>
< UL>
<立GT;< A HREF =#><我类=图标双角向右>< / I>扫描管理< / A>< /李>
<立GT;< A HREF =#><我类=图标双角向右>< / I>报表生成< / A>< /李>
< / UL>
< /李>
<立GT;< A HREF =#><我类=图标的笔记本电脑>< / I>特许经营管理和LT; / A>
< UL>
<立GT;< A HREF =#><我类=图标双角向右>< / I>特许注册和LT; / A>< /李>
<立GT;< A HREF =#><我类=图标双角向右>< / I>特许权使用费管理和LT; / A>< /李>
<立GT;< A HREF =#><我类=图标双角向右>< / I>特许经营账户管理与LT; / A>< /李>
< / UL>
< /李>
<立GT;< A HREF =#>< I类=图标字体>< I&GT /;客户管理与LT; / A>
< UL>
<立GT;< A HREF =#><我类=图标双角向右>< / I>客户注册和LT; / A>< /李>
<立GT;< A HREF =#><我类=图标双角向右>< /我>管理客户和LT; / A>< /李>
< / UL>
< /李>
<立GT;< A HREF =#><我类=图标线>< / I>辅导管理和LT; / A>
< UL>
<立GT;< A HREF =#><我类=图标双角向右>< /我>添加咨询会议< / A>< /李>
<立GT;< A HREF =#><我类=图标双角向右>< I&GT /;管理咨询会议< / A>< /李>
< / UL>
< /李>
<立GT;< A HREF =#><我类=图标工具>< / I>帐户< / A>
< UL>
<立GT;< A HREF =#><我类=图标双角向右>< /我>管理收入及LT; / A>< /李>
<立GT;< A HREF =#><我类=图标双角向右>< /我>管理费用和LT; / A>< /李>
< / UL>
< /李>
<立GT;< A HREF =#><我类=图标文件>< / I>报告< / A>
< UL>
<立GT;< A HREF =#><我类=图标双角向右>< / I> Elxir月度报告< / A>< /李>
<立GT;< A HREF =#><我类=图标双角向右>< / I>药剂年度报告< / A>< /李>
<立GT;< A HREF =#><我类=图标双角向右>< I&GT /;特许经营月报报告< / A>< /李>
<立GT;< A HREF =#><我类=图标双角向右>< / I>特许经营年度报告< / A>< /李>
< / UL>
< /李>
< / UL>
< / DIV>
解决方案在_Shared.cshtml把下面的div
< NAV ID =主导航>
@ Html.Partial(_ MenuLayout)
< / NAV>请新的
_MenuLayout.cshtml
视图动态生成的菜单在你的控制器,写code从数据库表中获取数据例如MenuTable和prepare列表,并赋值像下面
ViewBag.Menu =清单;
和在
_MenuLayout.cshtml
低于code部分观点的地方,@ {VAR menusList = ViewBag.Menu为IEnumerable< Elixir.Models.MenuItem取代; } @if(menusList!= NULL)
{
< UL ID =菜单级=包装CF>
@foreach(在menusList.Where VAR parentMenu(P => p.ParentMenuID == 0))
{
<立GT;
@if(!string.IsNullOrEmpty(@ parentMenu.ActionName))
{
@ Html.ActionLink(@ parentMenu.MenuName,@ parentMenu.ActionName,@ parentMenu.ControllerName)
}
其他
{
<跨度> @ parentMenu.MenuName< / SPAN>
如果(menusList.Count(p值=> p.ParentMenuID == parentMenu.MenuID)大于0)
{
< UL>
@foreach(在menusList.Where VAR childMenu(P => p.ParentMenuID == parentMenu.MenuID))
{
<立GT; @ Html.ActionLink(@ childMenu.MenuName,@ childMenu.ActionName,@ childMenu.ControllerName)LT; /李> 如果(menusList.Count(p值=> p.ParentMenuID == childMenu.MenuID)大于0)
{
的foreach(在menusList.Where VAR subChild(P => p.ParentMenuID == childMenu.MenuID))
{
@ Html.ActionLink(@ subChild.MenuName,@ subChild.ActionName,@ subChild.ControllerName)
}
}
}
< / UL>
}
} < /李>
}
< / UL>
}I want to ask about Dynamic Database Driven Menu Loading in ASP.Net
MVC3 razor .
This is my
1.View Code
2.Model for Menu
3.Model For Menu Items
4.Navigation Model Structure
In this project i have different User Logins .For each login they are
limited by modules .So When a user enter into the app with their
login ,they have only a limited access to their account.
For Example,There are two users A and B. User A can access only Accounts and Reports and User B can access only Reports .
To implement these things am loading menu from Database.
My Question is How to implement menu Loading from database in ASP.Net MVC3 Razor
View Code
@{ ViewBag.Title = "Elixir ERP V1.0 Beta"; Layout = "~/Views/Shared/_LayoutUser.cshtml"; } <div class="main-container"> <div class="main-wrapper"> <div class="scroll-top"> <a href="#" class="tip-top" title="Go Top"><i class="icon-arrow-up"></i></a> </div> <div class="left-bar merge-left"> <!-- SEARCH BAR --> <!-- LEFT NAV --> @section leftnav{ } </div> </div> <div class="container"> </div> </div>
Menu Model
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Elixir.Models { public class Menu { public Menu() { MenuItems = new List<MenuItem>(); } public int Id { get; set; } public string Name { get; set; } public List<MenuItem> MenuItems { get; set; } } }
Menu Items
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Elixir.Models { public class MenuItem { public int Id { get; set; } public int UserName { get; set; } public string Name { get; set; } public string ActionName { get; set; } public string ControllerName { get; set; } public string Url { get; set; } public Menu ParentMenu { get; set; } } }
Navigation Model Structure
<div class="left-nav"> <ul class="side-navigation accordion" id="nav-accordion"> <li><a href="#"><i class="icon-home"></i>Home</a></li> <li><a href="#"><i class="icon-list-alt"></i>User Management</a> <ul> <li><a href="#"><i class="icon-double-angle-right"></i>Create New User</a></li> <li><a href="#"><i class="icon-double-angle-right"></i>Manage Users</a></li> <li><a href="#"><i class="icon-double-angle-right"></i>View Users</a></li> </ul> </li> <li><a href="#"><i class="icon-table-2"></i>Employee Management</a> <ul> <li><a href="#"><i class="icon-double-angle-right"></i>Employee Registration</a></li> <li><a href="#"><i class="icon-double-angle-right"></i>Manage Employees</a></li> <li><a href="#"><i class="icon-double-angle-right"></i>View Employees</a></li> </ul> </li> <li><a href="#"><i class="icon-columns"></i>DMIT Management</a> <ul> <li><a href="#"><i class="icon-double-angle-right"></i>Scan Management</a></li> <li><a href="#"><i class="icon-double-angle-right"></i>Report Generation</a></li> </ul> </li> <li><a href="#"><i class="icon-laptop"></i>Franchise Management </a> <ul> <li><a href="#"><i class="icon-double-angle-right"></i>Franchise Registration</a></li> <li><a href="#"><i class="icon-double-angle-right"></i>Franchise Fee Management</a></li> <li><a href="#"><i class="icon-double-angle-right"></i>Franchise Account Management</a></li> </ul> </li> <li><a href="#"><i class="icon-font"></i>Customer Management </a> <ul> <li><a href="#"><i class="icon-double-angle-right"></i>Customer Registration</a></li> <li><a href="#"><i class="icon-double-angle-right"></i>Manage Customer</a></li> </ul> </li> <li><a href="#"><i class="icon-cord"></i>Counseling Management</a> <ul> <li><a href="#"><i class="icon-double-angle-right"></i>Add Counseling Session</a></li> <li><a href="#"><i class="icon-double-angle-right"></i>Manage Counseling Sessions</a></li> </ul> </li> <li><a href="#"><i class="icon-tools"></i>Accounts</a> <ul> <li><a href="#"><i class="icon-double-angle-right"></i>Manage Income</a></li> <li><a href="#"><i class="icon-double-angle-right"></i>Manage Expense</a></li> </ul> </li> <li><a href="#"><i class="icon-files"></i>Reports</a> <ul> <li><a href="#"><i class="icon-double-angle-right"></i>Elxir Monthly Reports</a></li> <li><a href="#"><i class="icon-double-angle-right"></i>Elixir Yearly Reports</a></li> <li><a href="#"><i class="icon-double-angle-right"></i>Franchise Monthly Reports</a></li> <li><a href="#"><i class="icon-double-angle-right"></i>Franchise yearly Reports</a></li> </ul> </li> </ul> </div>
解决方案Put below div in _Shared.cshtml
<nav id="mainNavigation"> @Html.Partial("_MenuLayout") </nav>
Make new
_MenuLayout.cshtml
view for dynamic generated menuIn your controller , write code to get Data from database table e.g. MenuTable and prepare list and assign values like below
ViewBag.Menu = list;
and in your
_MenuLayout.cshtml
partial view place below code,@{ var menusList = ViewBag.Menu as IEnumerable<Elixir.Models.MenuItem>; } @if (menusList != null) { <ul id="menu" class="wrap cf"> @foreach (var parentMenu in menusList.Where(p => p.ParentMenuID == 0)) { <li> @if (!string.IsNullOrEmpty(@parentMenu.ActionName)) { @Html.ActionLink(@parentMenu.MenuName, @parentMenu.ActionName, @parentMenu.ControllerName) } else { <span>@parentMenu.MenuName</span> if (menusList.Count(p => p.ParentMenuID == parentMenu.MenuID) > 0) { <ul> @foreach (var childMenu in menusList.Where(p => p.ParentMenuID == parentMenu.MenuID)) { <li>@Html.ActionLink(@childMenu.MenuName, @childMenu.ActionName, @childMenu.ControllerName)</li> if (menusList.Count(p => p.ParentMenuID == childMenu.MenuID) > 0) { foreach (var subChild in menusList.Where(p => p.ParentMenuID == childMenu.MenuID)) { @Html.ActionLink(@subChild.MenuName, @subChild.ActionName, @subChild.ControllerName) } } } </ul> } } </li> } </ul> }
这篇关于动态菜单加载在ASP.Net MVC3剃刀的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!