我正在开发一个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完成,但也许你们都有更好的主意。
答案 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>