在Asp.net MVC5的数据库中动态地从数据库加载LayoutPage中的菜单?

时间:2017-03-12 16:44:07

标签: c# asp.net-mvc

我想在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;   有一些无效的论点

谁能告诉我我做了什么错?谁能理解我的问题并解决我的问题?

1 个答案:

答案 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