39 votes

Asp.Net Mvc - Comment avoir un "contrôleur" dans une vue partagée ?

J'ai une vue partagée dans mon _Layout.cshtml pour mon en-tête nommé "_Header.cshtml".

Je voudrais afficher du texte et une image à partir de la base de données, j'ai donc besoin que mon contrôleur aille dans la base de données et la renvoie à _Header.cshtml.

Comment puis-je faire cela parce que le contrôleur appelé est toujours différent à chaque page que l'utilisateur visite. Existe-t-il un moyen d'avoir un contrôleur avec une vue partagée ?

Voici le _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>

59voto

Darin Dimitrov Points 528142

Dans votre action de contoller, vous pourriez spécifier le nom de la vue :

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

Maintenant, dans votre _Layout.cshtml au lieu de @Html.Partial("_Header") faites-le :

@Html.Action("Header", "Menu")

10voto

vidalsasoon Points 1856

... 1 an plus tard, je voudrais juste ajouter une chose à la réponse de Dimitrov. Vous pouvez rendre le contrôleur un peu plus propre :

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

2voto

WDuffy Points 2912

Créez une action dans l'un de vos contrôleurs pour rendre la vue de l'en-tête, puis appelez simplement @Html.RenderAction("Header") dans le fichier _Layout.cshtml.

Vous pouvez également passer un modèle dans la méthode RenderAction si nécessaire.

0voto

BFree Points 46421

Alors que l'approche RenderAction que WDuffy Je me suis récemment penché sur ce sujet en utilisant une autre approche basée sur IoC :

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

0voto

Sanu Antony Points 1

J'espère que la question que vous avez posée est comme.... Peut-on avoir un contrôleur pour un Shared Layout View.

La réponse simple est non.

Pour atteindre cet objectif, vous devez créer une vue partielle dans le même but et la placer dans votre mise en page partagée. De cette façon, vous pouvez atteindre votre objectif

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X