动态菜单加载在ASP.Net MVC3剃刀 [英] Dynamic Menu loading in ASP.Net MVC3 Razor

查看:133
本文介绍了动态菜单加载在ASP.Net MVC3剃刀的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想请教一下在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
}
< D​​IV CLASS =主容器>
    < D​​IV CLASS =主包装>
        < D​​IV CLASS =滚动顶部>
            < A HREF =#类=顶呱呱称号=Go热门><我类=图标箭头向上>&下; / I GT;&下; / A>
        < / DIV>
        < D​​IV CLASS =左边栏合并左>
            <! - 搜索栏 - >
            <! - 左侧导航栏 - >
          @section leftnav {
          }
        < / DIV>
    < / DIV>
    < D​​IV 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 {搞定;组; }
}
}

导航模型结构

 < D​​IV 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(menu​​sList!= 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>
                如果(menu​​sList.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; /李>                            如果(menu​​sList.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 menu

In 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆