我应该使用 @html.renderpartial 还是 @html.renderaction
本文关键字:@html 还是 renderaction renderpartial 我应该 | 更新日期: 2023-09-27 17:55:56
我正在尝试引入我的菜单。
在我的 _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>
}
}
当我转到.../导航/导航时,视图工作正常
我想做的是把它带到我的_Layout页面,这样我就可以把它用作我的菜单。
我继续收到错误 @Html.RenderAction("导航", "导航")
错误显示"'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)'的最佳重载方法匹配有一些无效的参数"
我应该将其用作部分吗?最好的方法是什么?感谢您的任何建议!
对于您要执行的操作,@Html.RenderAction(..)
是正确的调用。 RenderAction
ChildActionExtension
,需要将该属性添加到控制器。
您的控制器应如下所示。请注意,您还需要返回 PartView。
[ChildActionOnly]
public ActionResult Navigation()
{
var pages = pageRepository.Pages;
return PartialView(pages);
}
"呈现"操作不返回 HTML,而是将内容添加到响应中。这样,您的视图应如下所示:
@{@Html.RenderAction("Navigation", "Nav");}
参考: http://msdn.microsoft.com/en-us/library/ee721274(v=vs.108).aspx
因为 Html.RenderAction 是一个空的并且不返回值,所以你需要用大括号"转义"调用
@{Html.RenderAction("Navigation", "Nav");}
在控制器中,应改为返回分部视图。
public ActionResult Navigation()
{
var pages = pageRepository.Pages;
return PartialView(pages);
}