我应该使用@html.renderpartial还是@html.renderaction

iro*_*man 7 c# asp.net asp.net-mvc partial-views renderaction

我正试着带上我的菜单.

在我的_Layout.cshtml页面中

<div class="wrapper">
                <!-- Navigation -->

                  @Html.RenderAction("Navigation", "Nav")
Run Code Online (Sandbox Code Playgroud)

导航控制器看起来像这样

public ActionResult Navigation()
{
    var pages = pageRepository.Pages;
    return View(pages);
}
Run Code Online (Sandbox Code Playgroud)

导航视图看起来像这样

@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> 

    }
}
Run Code Online (Sandbox Code Playgroud)

当我去.../nav/navigation时,视图工作正常

我想要做的是将它带入我的_Layout页面,以便我可以将它用作我的菜单.

我继续使用@ Html.RenderAction("导航","导航")出错

错误说"'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)'的最佳重载方法匹配'有一些无效的参数"

我应该使用它作为部分吗?最好的方法是什么?谢谢你的建议!

anA*_*ent 12

对于你想要做的,@Html.RenderAction(..)是正确的电话.RenderActionChildActionExtension,并将需要将该属性添加到控制器.

您的控制器应如下所示.请注意,您还需要返回PartialView.

[ChildActionOnly]
public ActionResult Navigation()
{
    var pages = pageRepository.Pages;
    return PartialView(pages);
}
Run Code Online (Sandbox Code Playgroud)

"渲染"操作不返回HTML,而是将内容添加到响应中.有了它,您的视图应如下所示:

@{@Html.RenderAction("Navigation", "Nav");}
Run Code Online (Sandbox Code Playgroud)

参考:http://msdn.microsoft.com/en-us/library/ee721274(v = vs.108).aspx