从对象动态导航

时间:2012-06-16 06:32:36

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

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

例如:

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

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

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

2 个答案:

答案 0 :(得分:3)

看看Phil Haacked博客Html.RenderAction and Html.Action。他的例子实际上是一个菜单,你可以从布局轻松调用。

答案 1 :(得分: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>