我想把菜单带来。
在我的layout.cshtml页面中
<div class="wrapper">
<!-- Navigation -->
@Html.RenderAction("Navigation", "Nav")
导航控制器是这样的
public ActionResult Navigation()
{
var pages = pageRepository.Pages;
return View(pages);
}
导航视图如下所示
@model IEnumerable<Site.Domain.Entities.Page>
@{
Layout = null;
List<Site.Domain.Entities.Page> pages = new List<Site.Domain.Entities.Page>();
foreach(var page in Model)
{
pages.Add(page);
}
}
@foreach (var link in Model)
{
if (link.ParentPage == "Home")
{
<li>@link.PageTitle</li>
<ul>
@foreach (var subLink in pages)
{
if (subLink.ParentPage == link.PageTitle)
{
<li>@subLink.PageTitle</li>
}
}
</ul>
}
}
当我转到…/nav/navigation时,视图工作正常
我要做的是把它带到我的布局页面,这样我就可以用它作为我的菜单了。
我继续收到@html.renderaction(“navigation”,“nav”)的错误
错误显示“与'system.web.webpages.webpageExecutingBase.write(system.web.webpages.helperResult)'匹配的最佳重载方法具有一些无效参数”
我应该用这个作为部分吗?最好的办法是什么?
谢谢你的建议!
最佳答案
对于您正在尝试的操作,@Html.RenderAction(..)
是正确的调用。RenderAction
是ChildActionExtension
并且需要将该属性添加到控制器。
你的控制器应该像下面这样。请注意,您还需要返回partialview。
[ChildActionOnly]
public ActionResult Navigation()
{
var pages = pageRepository.Pages;
return PartialView(pages);
}
render操作不返回html,而是将内容添加到响应中。这样,你的观点应该是:
@{@Html.RenderAction("Navigation", "Nav");}
参考:http://msdn.microsoft.com/en-us/library/ee721274(v=vs.108).aspx