39 votes

Pourquoi ne peut _ViewStart.cshtml accéder à l'objet ViewBag ?

J'ai le fichier default _ViewStart.cshtml dans mon dossier/Views. J'aimerais pouvoir accéder à mon objet ViewBag afin de pouvoir définir le titre par défaut pour toutes mes vues.

Toutefois, avec :

@{
    Layout = "~/Views/Shared/SiteLayout.cshtml";
    ViewBag.Title = "bytecourse - Online Courses in Technology";
}

Je reçois "Le nom 'ViewBag' n'existe pas dans le contexte actuel" comme une erreur d'exécution.

Que dois-je faire ?

4voto

just.jimmy Points 555

hmm, vous pouvez accéder à ViewBag via ViewData, par exemple ViewContext.ViewData["Title"].

Ainsi, si vous définissez des données ViewBag dans un filtre d'action par exemple, vous pouvez les extraire de _ViewStart.cshtml en utilisant ViewContext.ViewData["Title"].

Mais j'ai essayé d'attribuer une valeur en utilisant ViewContext.ViewData["Key"] = value; et cela ne semble pas persister à la vue réelle.

4voto

Raj Points 41

Vous pouvez y parvenir en utilisant des vues partielles. Mettez tout votre code commun lié au titre dans une vue partielle appelée Title.cshtml dans le dossier partagé. Dans _viewstart, il suffit d'appeler la vue Partielle.

_ViewStart.cshtml :

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
@Html.Partial("Title")

~/Shared/Title.cshtml :

@{
 ViewBag.Title = "bytecourse - Online Courses in Technology"; 
}

3voto

Darin Dimitrov Points 528142

Vous pouvez utiliser des sections dans votre _mise en page si vous souhaitez définir un titre par défaut :

<title>
    @if (IsSectionDefined("Title"))
    {
        @RenderSection("Title")
    }
    else
    {
        @:bytecourse - Online Courses in Technology
    }
</title>

et les vues intérieures que vous pourriez remplacer :

@section Title {
    Overriden title
}

Une raison de plus de ne pas utiliser ViewBag :-)

0voto

Vous pouvez créer une page de mise en page qui utilise vos données Viewbag et ajouter la mise en page à votre page blank _ViewStart, elle fonctionnera

sur ViewStart.cshtml

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

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