【问题标题】:ASP.NET MVC Database Driven Menu in shared view共享视图中的 ASP.NET MVC 数据库驱动菜单
【发布时间】:2014-06-12 18:38:16
【问题描述】:

我需要一些关于在 _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>

我的控制器:

   public ActionResult _menu()
   {
       return PartialView(db.IndexModels.ToList());
   }

我的 _layout.cshtml

            <ul id="navigation">
                @foreach (var item in Model)
                {
                    @Html.Partial("_menu")
                }
            </ul>

坦率地说,我已经在网上搜索过。从 ASP 经典(是的,我知道)到 ASP.net 和 MVC 的过渡非常困难。

非常感谢您的温柔指导。 谢谢

安德鲁

【问题讨论】:

    标签: asp.net-mvc razor asp.net-mvc-partialview


    【解决方案1】:

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

    @foreach (var item in Model)
    {
      Html.RenderAction("_menu", "Home");
    }
    

    注意:你不应该需要一个前置的“@”,因为它在 foreach 循环的上下文中

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

    家庭控制器:

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

    _layout.cshtml

    @{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>
    

    _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>
    }
    

    【讨论】:

    • 虽然,回顾您的问题,从主局部视图调用第二个局部视图以呈现嵌套项可能更合适。我做类似的事情。否则你会有多个不需要的电话回你的控制器
    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 2012-12-29
    相关资源
    最近更新 更多