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

2020-02-17 08:34发布

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 to go in the database and return it to the _Header.cshtml.

How can I do that because the controller called is always different each page the user goes. Is there a way to have controller with Shared View?

Here is the _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>

5条回答
对你真心纯属浪费
2楼-- · 2020-02-17 09:13

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")
查看更多
ら.Afraid
3楼-- · 2020-02-17 09:18

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.

查看更多
贪生不怕死
4楼-- · 2020-02-17 09:22

... 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);
    }
}
查看更多
贪生不怕死
5楼-- · 2020-02-17 09:22

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

查看更多
小情绪 Triste *
6楼-- · 2020-02-17 09:31

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

查看更多
登录 后发表回答