簡體   English   中英

我應該使用@html.renderpartial還是@html.renderaction

[英]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(..)是正確的調用。 RenderActionChildActionExtension ,需要將該屬性添加到控制器。

您的控制器應如下所示。 請注意 ,您還需要返回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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM