I have a shared view in my _Layout.cshtml for my header named \"_Header.cshtml\".
I would like to display text and image from the database, so I need my controller t
Create an action in one of your controllers to render the header view, then simply call @Html.RenderAction("Header") within the _Layout.cshtml.
You can also pass a model into the RenderAction method if required.
In your contoller action you could specify the name of the view:
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);
}
}
Now in your _Layout.cshtml
instead of @Html.Partial("_Header")
do this:
@Html.Action("Header", "Menu")
While the RenderAction approach that WDuffy provided works well, I recently blogged about this very topic using another approach using IoC:
http://crazorsharp.blogspot.com/2011/03/master-page-model-in-aspnet-mvc-3-using.html
... 1 year later would just like to add one thing to Dimitrov answer. You can make the controller a little cleaner:
public class MenuController : Controller
{
[ChildActionOnly]
public ActionResult Header()
{
var model = ... // go to the database and fetch a model
return Partial("_Header", model);
}
}
I hope the question you have asked is Like.... Can we have a controller for a Shared Layout View.
Simple answer is No.
To achieve this goal you have to create a partial view for the Same purpose and put it into you shared Layout. By that means you can achieve you Goal