3

我正在开发一个 ASP.NET MVC3 Web 应用程序,我想创建一个导航菜单,该菜单具有从对象动态创建的子菜单。例如,我有一个包含书籍列表的库对象/模型。我希望我的导航能够动态填充指向每本书的链接并显示它们的标题。

前任:

Home
Book List
 - Book 1
 - Book 2
 - Book 3
About

我通过从我的控制器中通过 ViewData 传递 Library 对象来实现这一点。然后我共享的 _Layout.cshtml 页面读取 ViewData 并填充导航菜单。然而,这个解决方案的缺点是在我的控制器中返回视图的每个方法都必须将 Library 对象放入 ViewData。所以我想知道是否有更好或更简单的方法来做到这一点?

我确信它可以用 jQuery 完成,但也许你们都有更好的主意。

4

2 回答 2

3

看看 Phil Haacked 的博客Html.RenderAction 和 Html.Action。他的示例实际上是一个菜单,您可以轻松地从布局中调用它。

于 2012-06-16T07:01:39.850 回答
0

Erik 发布到 Phil Haack 博客的链接是正确的解决方案,但我花了一段时间才弄清楚 Phil 的示例在做什么。这是一个非常古老的 MVC2 示例,所以这是我的程序最终看起来的示例,以防有人有同样的问题。

家庭控制器:

[ChildActionOnly]
public ActionResult Menu()
{
Library library = something.getLibrary();

return PartialView("_MenuPartial", library);
}

共享局部视图_MenuPartial.cshtml:

@model ProjectName.Models.Library

<ul>  
@foreach (var book in @Model.BookList)
{
     <li><a href="#">@book.Title</a></li>
}
</ul>

共享视图_Layout.cshtml:

<html>
<head>
</head>
<body>
   <nav>
   @{Html.RenderAction("Menu","Home");} 
   </nav>
</body>
</html>
于 2012-06-16T11:29:38.820 回答