​

在VS2010中利用Asp.net MVC自带的模板生成的菜单是固定的,没办法更改,下面利用PartialView实现简单的一级菜单。

[转]Asp.net MVC 利用PartialView 构造自定义菜单_asp.net

1) 修改_Layout.cshtml,在<nav>部分改成@{ Html.RenderAction("Menu", "Home");}




​?​




​<​​​​div​​ ​​class="float-right">​


​<​​​​section​​ ​​id="login">​


​@Html.Partial("_LogOnPartial")                       ​


​</​​​​section​​​​>​


​<​​​​nav​​​​>    ​


​@{ Html.RenderAction("Menu", "Home");}                        ​


​</​​​​nav​​​​>​


​</​​​​div​​​​>​



  MVC将会调用HomeController的Menu方法来显示菜单

 

2)在HomeController里面添加Menu方法,返回PartialView



[转]Asp.net MVC 利用PartialView 构造自定义菜单_mvc_02

public PartialViewResult Menu()
{
List<MenuItem> menus = new List<MenuItem>();
menus.Add(new MenuItem{ Text="Home", Controller="Home", Action="Index"});
menus.Add(new MenuItem { Text = "Job", Controller = "Job", Action = "Index" });
menus.Add(new MenuItem { Text = "About", Controller = "Home", Action = "About" });
menus.Add(new MenuItem { Text = "Contact", Controller = "Home", Action = "Contact" });
return PartialView(new MenuModel { Menus = menus });
}


[转]Asp.net MVC 利用PartialView 构造自定义菜单_mvc_02


 

其中:MenuItem为新添加的自定义的Class



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;

namespace MVCDemo.Models
{

public class MenuItem
{
public string Text { get; set; }
public string Controller { get; set; }
public string Action { get; set; }
}


public class MenuModel
{
public List<MenuItem> Menus { get; set; }
}
}


 

 

3) 定义一个新的PartialView ,名称为Menu.cshtml,基于原来自动生成的代码修改为:




​?​




​@model MVCDemo.Models.MenuModel ​


​<​​​​ul​​ ​​id="menu">​


​@foreach (var item in Model.Menus)​


​{ ​


​<​​​​li​​​​>@Html.RouteLink(item.Text, new { controller = item.Controller, action = item.Action })</​​​​li​​​​>​


​}​


​</​​​​ul​​​​>​



利用PartialView可以实现自定义多级菜单,并且权限控制也很容易。 

完整代码如下:

 ​

 运行该示例可能需要安装asp.net MVC4