7

我正试着把我的菜单拿进来。

在我的 _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("Navigation", "Nav") 错误

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

我应该将其用作部分吗?解决此问题的最佳方法是什么?感谢您的任何建议!

4

2 回答 2

12

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

您的控制器应如下所示。请注意,您还需要返回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

于 2013-01-25T17:03:43.973 回答
3

因为 Html.RenderAction 是一个 void 并且不返回值,所以您需要用大括号“转义”调用

@{Html.RenderAction("Navigation", "Nav");}

在您的控制器中,您应该返回一个局部视图。

public ActionResult Navigation()
{
    var pages = pageRepository.Pages;
    return PartialView(pages);
}
于 2013-01-25T17:06:07.403 回答