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 に答える