「_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>
コントローラーアクションで、ビューの名前を指定できます。
_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")
_
... 1年後、ディミトロフの回答に1つだけ追加したいと思います。コントローラを少しきれいにすることができます:
public class MenuController : Controller
{
[ChildActionOnly]
public ActionResult Header()
{
var model = ... // go to the database and fetch a model
return Partial("_Header", model);
}
}
コントローラーの1つでアクションを作成してヘッダービューをレンダリングし、_Layout.cshtml内で@ Html.RenderAction( "Header")を呼び出すだけです。
必要に応じて、モデルをRenderActionメソッドに渡すこともできます。
WDuffy が提供するRenderActionアプローチはうまく機能しますが、最近、IoCを使用した別のアプローチを使用してこのトピックについてブログに投稿しました。
http://crazorsharp.blogspot.com/2011/03/master-page-model-in-aspnet-mvc-3-using.html
あなたが尋ねた質問が「いいね...」であることを願っています...共有レイアウトビュー用のコントローラーはありますか。
簡単な答えはいいえです。
この目標を達成するには、同じ目的の部分ビューを作成し、共有レイアウトに配置する必要があります。それにより、目標を達成できる