web-dev-qa-db-fra.com

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

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

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

Comment puis-je faire cela parce que le contrôleur appelé est toujours différent à chaque page de l'utilisateur. Est-il possible d'avoir un contrôleur avec 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>

37

Dans votre action de contrôleur, vous pouvez 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"), procédez comme suit:

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

... 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);
    }
}
9
vidalsasoon

Créez une action dans l’un de vos contrôleurs pour afficher l’en-tête, puis appelez simplement @ Html.RenderAction ("En-tête") dans _Layout.cshtml.

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

2
WDuffy

Bien que l’approche RenderAction fournie par WDuffy fonctionne bien, j’ai récemment écrit un blog sur ce sujet en utilisant une autre approche utilisant IoC:

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

0
BFree

J'espère que la question que vous avez posée est la suivante: .... Pouvons-nous avoir un contrôleur pour une vue de disposition partagée?.

La réponse simple est non.

Pour atteindre cet objectif, vous devez créer une vue partielle ayant le même objectif et l'insérer dans votre mise en page partagée. Par ce moyen, vous pouvez atteindre votre objectif

0
Sanu Antony