web-dev-qa-db-ja.com

Asp.Net Mvc-共有ビューで「コントローラー」を使用する方法

「_Header.cshtml」という名前のヘッダーの_Layout.cshtmlに共有ビューがあります。

データベースのテキストと画像を表示したいので、コントローラーをデータベースに移動して_Header.cshtmlに返す必要があります。

呼び出されたコントローラーは、ユーザーが移動するページごとに常に異なるため、どうすればよいですか?共有ビューでコントローラーを使用する方法はありますか?

これが_Layout.cshtmlです

    <div id="header">
        <div id="title">
            @Html.Partial("_Header")
        </div>

        <div id="logindisplay">
           @Html.Partial("_CultureChooser")
            <br />
           @Html.Partial("_LogOnPartial")
        </div>

        <div id="menucontainer">
           @Html.Partial( "_MenuPartial")
        </div>
    </div>

    <div id="main">
        @RenderBody()
        <div id="footer">
        </div>
    </div>

</div>
37

コントローラーアクションで、ビューの名前を指定できます。

_public class MenuController : Controller
{
    [ChildActionOnly]
    public ActionResult Header()
    {
        var model = ... // go to the database and fetch a model
        return View("~/Views/Shared/_Header.cshtml", model);
    }
}
_

これで、@Html.Partial("_Header")の代わりに__Layout.cshtml_でこれを行います:

_@Html.Action("Header", "Menu")
_
56
Darin Dimitrov

... 1年後、ディミトロフの回答に1つだけ追加したいと思います。コントローラを少しきれいにすることができます:

public class MenuController : Controller
{
    [ChildActionOnly]
    public ActionResult Header()
    {
        var model = ... // go to the database and fetch a model
        return Partial("_Header", model);
    }
}
9
vidalsasoon

コントローラーの1つでアクションを作成してヘッダービューをレンダリングし、_Layout.cshtml内で@ Html.RenderAction( "Header")を呼び出すだけです。

必要に応じて、モデルをRenderActionメソッドに渡すこともできます。

2
WDuffy

WDuffy が提供するRenderActionアプローチはうまく機能しますが、最近、IoCを使用した別のアプローチを使用してこのトピックについてブログに投稿しました。

http://crazorsharp.blogspot.com/2011/03/master-page-model-in-aspnet-mvc-3-using.html

0
BFree

あなたが尋ねた質問が「いいね...」であることを願っています...共有レイアウトビュー用のコントローラーはありますか。

簡単な答えはいいえです。

この目標を達成するには、同じ目的の部分ビューを作成し、共有レイアウトに配置する必要があります。それにより、目標を達成できる

0
Sanu Antony