[英]should I be using an @html.renderpartial or @html.renderaction
我正試着帶上我的菜單。
在我的_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時,視圖工作正常
我想要做的是將它帶入我的_Layout頁面,以便我可以將它用作我的菜單。
我繼續使用@ Html.RenderAction(“導航”,“導航”)出錯
錯誤說“'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);
}
“渲染”操作不返回HTML,而是將內容添加到響應中。 有了它,您的視圖應如下所示:
@{@Html.RenderAction("Navigation", "Nav");}
參考: http : //msdn.microsoft.com/en-us/library/ee721274(v = vs.108).aspx
因為Html.RenderAction是一個void而且沒有返回值,所以你需要用大括號“轉義”調用
@{Html.RenderAction("Navigation", "Nav");}
在控制器中,您應該返回部分視圖。
public ActionResult Navigation()
{
var pages = pageRepository.Pages;
return PartialView(pages);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.