我想在MVC的布局页面中动态加载菜单。
我创建了Viewcode,菜单和菜单项的模型。现在我想要的是动态加载菜单。它必须从数据库中检索数据并在布局页面中加载。
我的模特
菜单型号
public Menu()
{
MenuItems = new List<MenuItem>();
}
public int Id { get; set; }
public string Name { get; set; }
public List<MenuItem> MenuItems { get; set; }
我的模型MenuItem
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; }
}
我的控制器代码
public ActionResult Index()
{
var menu = new Menu();
menu.Name = "Main Menu";
var query = db.ApplicationNames.Select(e => new {
UID= e.UID,
e.ApplicationName1
}).FirstOrDefault();
var uid = query.UID.ToString();
var name = query.ApplicationName1;
var items = new List<MenuItem>() { new MenuItem { Name = "FirstMenu", ControllerName = uid, ActionName = name }};
menu.MenuItems = items;
return PartialView("_MenuLayout",menu);
}
我的部分视图_MenuLayout
@model List<DynamicMenuLoading.Models.Menu>
<ul>
<li>
<a href="#">
<span>@Model.Name</span>
</a>
<ul>
@foreach (var item in Model.MenuItems)
{
<li><a href="@Url.Action(@item.ActionName , @item.ControllerName )"><i class="fa fa-circle-o"></i>@item.Name</a></li>
}
</ul>
</li>
</ul>
我的布局页面
<nav id="mainNavigation">
@Html.Partial("_MenuLayout")
</nav>
我的表名ApplicationName
UID ApplicationName
1 EMPLOYEE
2 CUSTOMER
3 CITY
4 STATE
5国家
当我尝试运行我的项目时,我收到此错误:
E:\任务 试图\ DynamicMenuLoading \ DynamicMenuLoading \查看\ Shared_MenuLayout.cshtml(8): 错误CS1502:最佳重载方法匹配 &#39; System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)&#39; 有一些无效的论点
谁能告诉我我做了什么错?谁能理解我的问题并解决我的问题?
答案 0 :(得分:1)
概念问题: 您需要创建单独的控制器操作以检索菜单数据并显示菜单视图。
public ActionResult MenuLayout()
{
var menu = new Menu();
// TODO: Fill menu with data here
return PartialView("_MenuLayout", menu);
}
从布局页面调用该Action:
<nav id="mainNavigation">
@Html.Action("MenuLayout", "Home")
</nav>
此外,在局部视图中,使用类Menu的模型,而不是该类的对象列表:
@model DynamicMenuLoading.Models.Menu