本文转自:http://www.cnblogs.com/huyq2002/archive/2012/01/06/2314838.html
在VS2010中利用Asp.net MVC自带的模板生成的菜单是固定的,没办法更改,下面利用PartialView实现简单的一级菜单。
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
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 });
}
其中: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可以实现自定义多级菜单,并且权限控制也很容易。
完整代码如下:
http://files.cnblogs.com/huyq2002/MVCDemo.zip
运行该示例可能需要安装asp.net MVC4