37 votes

MVC3 de transmission de données au-delà du modèle à vue Partielle

Est-il un moyen de passer un morceau de données supplémentaires avec un modèle à une vue Partielle?

E. G.

@Html.Partial("_SomeTable", (List<CustomTable>)ViewBag.Table);

Est ce que j'ai maintenant. Puis-je ajouter quelque chose d'autre sans changer mon Modèle?

@Html.Partial("_SomeTable", (List<CustomTable>)ViewBag.Table, "TemporaryTable");

Je vois ViewDataDictionary comme un param. Je ne suis pas sûr de ce que cet objet fait ou si cela répond à mon besoin.

66voto

Martin Booth Points 5384

ViewDataDictionary peut être utilisé pour remplacer le ViewData dictionnaire dans la vue partielle... Si vous ne passez pas d'un ViewDataDictionary paramètre puis le parial de viewdata est le même que les parents.

Un exemple de la façon de l'utiliser dans le parent est:

@Html.Partial("_SomeTable", (List<CustomTable>)ViewBag.Table, new ViewDataDictionary {{ "Key", obj }});

Puis, dans l'partielle vous pouvez accéder à cet obj comme suit:

@{ var obj = ViewData["key"]; }

Une approche complètement différente woud être d'utiliser le n-uplet de la classe de groupe à la fois le modèle d'origine et supplémentaire des données comme suit:

@Html.Partial("_SomeTable", Tuple.Create<List<CustomTable>, string>((List<CustomTable>)ViewBag.Table, "Extra data"));

Le type de modèle pour la partie serait alors:

@model Tuple<List<CustomTable>, string>

De modèle.Item1 donne la Liste de l'objet et du Modèle.Item2 donne la chaîne

7voto

Tridus Points 4120

Vous devriez être en mesure de simplement le mettre dans le ViewBag et ensuite y accéder depuis le ViewBag dans la vue partielle. Voir cette SORTE de réponse.

6voto

Travis J Points 28588

Je suis tombé sur cette question. Je voulais avoir un extrait de code reproduit de nombreuses fois, et ne veulent pas de copier coller. Le code devrait varier légèrement. Après avoir regardé les autres réponses, je n'ai pas envie d'aller l'itinéraire exact et décidé, au lieu de simplement utiliser un plain Dictionary.

Par exemple:

parent.cshtml

@{
 var args = new Dictionary<string,string>();
 args["redirectController"] = "Admin";
 args["redirectAction"] = "User";
}
@Html.Partial("_childPartial",args)

_childPartial.cshtml

@model Dictionary<string,string>
<div>@Model["redirectController"]</div>
<div>@Model["redirectAction"]</div>

3voto

Simon_Weaver Points 31141

Vous pouvez obtenir, même intelligent , comme illustré ici par Craig Stuntz

Html.RenderPartial("SomePartialView", null, 
    new ViewDataDictionary(new ViewDataDictionary() { {"SomeDisplayParameter", true }})
        { Model = MyModelObject });

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