Asp.net mvc 共享视图中的ASP.NET MVC数据库驱动菜单

Asp.net mvc 共享视图中的ASP.NET MVC数据库驱动菜单,asp.net-mvc,razor,asp.net-mvc-partialview,Asp.net Mvc,Razor,Asp.net Mvc Partialview,我需要一些关于在_layout.cshtml文件中插入菜单的指导。我遇到了两个问题: 1) 即使创建了一个包含两个数据模型的附加模型,也无法将这两个模型传递到布局文件 例如: 型号: public class IndexModel { public tblMenu tblMenu { get; set; } public tblSite tblSite { get; set; } } 我需要从同一页的菜单表和网站表的信息 2) 当我创建一个局部视图来传递菜单数据时,我不断收到异

我需要一些关于在_layout.cshtml文件中插入菜单的指导。我遇到了两个问题: 1) 即使创建了一个包含两个数据模型的附加模型,也无法将这两个模型传递到布局文件 例如:

型号:

public class IndexModel
{
    public tblMenu tblMenu { get; set; }
    public tblSite tblSite { get; set; }
}
我需要从同一页的菜单表和网站表的信息

2) 当我创建一个局部视图来传递菜单数据时,我不断收到异常,告诉我不能以这种方式使用模型

我的观点:

    @model mvcSPS.Models.IndexModel
    <li>@Model.tblMenu.MenuName</li>
My_layout.cshtml

            <ul id="navigation">
                @foreach (var item in Model)
                {
                    @Html.Partial("_menu")
                }
            </ul>
@{Html.RenderAction("Menu", "Home");} //be sure to fully-qualify the controller since it's layout, otherwise it'll look to the current controller based on route values collection
    @foreach(模型中的var项目) { @Html.Partial(“\u菜单”) }
坦率地说,我已经用拖网捕鱼了。。我正在经历一个从ASP经典(是的,我知道)到ASP.net和MVC的艰难过渡

你的温和指导将不胜感激。 谢谢


Andrew

在_layout.cshtml中更改@Html.Partial以调用控制器函数并呈现操作方法的结果

@foreach (var item in Model)
{
  Html.RenderAction("_menu", "Home");
}
注意:不需要前缀“@”,因为它位于foreach循环的上下文中

编辑:根据我下面的评论建议

家庭控制器:

   public ActionResult _menu()
   {
       return PartialView(db.IndexModels.ToList());
   }
public ActionResult Menu() {
  return PartialView("_menu", db.IndexModels.ToList());
}
_layout.cshtml

            <ul id="navigation">
                @foreach (var item in Model)
                {
                    @Html.Partial("_menu")
                }
            </ul>
@{Html.RenderAction("Menu", "Home");} //be sure to fully-qualify the controller since it's layout, otherwise it'll look to the current controller based on route values collection
_menu.cstml

<nav>
  <ul>
  @foreach(var item in Model) {
    Html.Partial("_menuItem", item)
  }
  </ul>
</nav>

    @foreach(模型中的var项目){ Html.Partial(“\u menuItem”,项目) }
_menuItem.cshtml

@foreach(var item in Model) {
  <li>
    <a href="http://url">text</a>
    @if(item.Children.Any())
    {
      <ul>
         Html.Partial("_menuItem", item.Children)
      </ul>
    }
  </li>
}
@foreach(模型中的变量项){
  • @if(item.Children.Any()) {
      Html.Partial(“\u menuItem”,item.Children)
    }
  • }
    不过,回顾您的问题,可能更适合使用从主局部视图调用的第二个局部视图来呈现嵌套项。我也做类似的事情。否则,您将有多个未经请求的呼叫返回到控制器