web-dev-qa-db-de.com

Asp.Net Mvc - So haben Sie einen "Controller" in der gemeinsamen Ansicht

Ich habe in meinem _Layout.cshtml eine gemeinsame Ansicht für meinen Header namens "_Header.cshtml".

Ich möchte Text und Bilder aus der Datenbank anzeigen, daher muss mein Controller in die Datenbank gehen und ihn an _Header.cshtml zurückgeben.

Wie kann ich das tun, weil der aufgerufene Controller bei jeder Seite, die der Benutzer besucht, unterschiedlich ist. Gibt es eine Möglichkeit, Controller mit Shared View zu haben?

Hier ist die _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

In Ihrer Controller-Aktion können Sie den Namen der Ansicht angeben:

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);
    }
}

Jetzt in deinem _Layout.cshtml anstelle von @Html.Partial("_Header"):

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

... 1 Jahr später möchte ich Dimitrovs Antwort einfach eine Sache hinzufügen. Sie können den Controller etwas sauberer machen:

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

Erstellen Sie in einem Ihrer Controller eine Aktion, um die Kopfansicht zu rendern, und rufen Sie einfach @ Html.RenderAction ("Header") in der _Layout.cshtml auf.

Sie können bei Bedarf auch ein Modell an die RenderAction-Methode übergeben.

2
WDuffy

Während der RenderAction-Ansatz, den WDuffy bereitstellt, gut funktioniert, habe ich kürzlich über dieses Thema einen anderen Ansatz mit IoC verwendet:

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

0
BFree

Ich hoffe, die Frage, die Sie gestellt haben, ist wie .... Können wir einen Controller für eine freigegebene Layoutansicht haben?.

Einfache Antwort ist Nein.

Um dieses Ziel zu erreichen, müssen Sie eine Teilansicht für den gleichen Zweck erstellen und in Ihr freigegebenes Layout einfügen. Auf diese Weise können Sie Ihr Ziel erreichen

0
Sanu Antony