Asp.Net Mvc - How to have a “controller” in shared view

后端 未结 5 2029
暖寄归人
暖寄归人 2020-12-24 11:45

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

相关标签:
5条回答
  • 2020-12-24 11:53

    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.

    0 讨论(0)
  • 2020-12-24 12:01

    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")
    
    0 讨论(0)
  • 2020-12-24 12:03

    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

    0 讨论(0)
  • 2020-12-24 12:11

    ... 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);
        }
    }
    
    0 讨论(0)
  • 2020-12-24 12:19

    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

    0 讨论(0)
提交回复
热议问题