57 votes

Impossible d'accéder à ViewBag dans une vue partielle en ASP.NET MVC3

J'ai un contrôleur qui appelle une vue. Dans la vue, il y a un PartialView appelé être @Html.Partial("ViewName", model). Cela fonctionne bien.

Mais dans le controller Je souhaite mettre quelque chose dans le viewbag qui serait difficile à mettre dans le viewmodel que je passe à la vue. La vue principale n'a aucun problème pour accéder au ViewBag mais dans le PartialView il ne renvoie rien.

Est-il possible d'utiliser le ViewBag dans ce cas ou dois-je "pirater" ces données dans le modèle que je passe à la vue (et le modèle que je passe à la fonction PartialView et le modèle que je passe à la PartialView imbriqué dans le premier PartialView ) ?

0 votes

Une chose à retenir au sujet de la dynamique est qu'elle est sensible à la casse.

0 votes

Mon erreur, j'ai utilisé @Html.Action dans la chaîne sans m'en souvenir.

7 votes

C'est vraiment idiot que j'aie obtenu un badge d'or pour cette question très médiocre. J'ai un peu honte.

1voto

John Sully Points 61

J'avais le même problème avec une page très basique :

@Html.Partial("_AppIntro")

<div class="form-group row">
    <div class="col-md-10">
        <a href="http://stackoverflow.com/Ag/Application/1" class="btn btn-default btn-primary">Next</a>
    </div>
</div>

Et la vue partielle ne contenait que du texte avec quelques références à ViewBag pour récupérer certaines valeurs dynamiques transmises par le contrôleur. Il s'est avéré que le nom de la vue partielle avait de l'importance. La suppression de la page partielle et sa recréation avec Ajouter -> Vue -> Vue MVC 5 mais en nommant la page _AppIntro.cshtml a réglé le problème.

0voto

brykneval Points 836

Mon scénario était que j'avais une vue partielle avec le modèle IEnumerable<SampleModel> Cependant, j'ai dû passer en utilisant, parce que Model.SampleModelList peut être null

@Html.Partial("PartialViewName", Model.SampleModelList, new ViewDataDictionary())

La solution simple était que, puisque PartialView fait maintenant partie de View, chaque élément de View peut être accédé par PartialView. J'ai donc défini les données de ViewBag à data-element sur View html, au lieu de ViewBag.

<div class="showcase-heading" id="dvValue" data-id="@Model.ContentId">@Model.Name</div>

0voto

Miro Slav Points 1

Dans mon cas @ViewContext.Controller.ViewBag.Message n'a pas fonctionné aussi bien. J'ai une vue partielle qui est référencée depuis différents contrôleurs avec différents modèles, hérités d'une classe de modèle de base. Dans ce cas, le Controller.ViewBag est considéré comme nul.

Ma solution est la suivante :

@{
var dummy = ViewContext.Controller.ViewData.TryGetValue("CommonRules", out object rules);
}
...
@Html.Raw(rules)

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